3

我将要在input.txt中搜索的文件和要查找的字符串称为mystring

input.txt 的示例内容(真实的 input.txt)

randomstring1<>"\/=:
randomstring2<ORIGINAL>mystring</ORIGINAL>randomstring3
  • mystring被字符串包围<ORIGINAL></ORIGINAL>必须搜索
  • 两个标签之间的字符串ORIGINAL应该被复制到剪贴板(使用|剪辑)
  • mystring和标签只出现一次。但他们没有固定的位置
  • 所有字符串都可以包含特殊字符(<、>、"、\、/、=、:)

我读了很多其他 SO 问题,但老实说:FOR 循环和 SET 命令语法对我来说太尴尬了。我想我最好的选择是 FINDSTR 命令。但也许在 RegEx 表达式的一些帮助下也是可能的。

不想使用 VBscript、Powershell、SED、FART、AWK、grep 或任何其他附加工具。

如果您发布解决方案,请善待并解释困难的部分。
我想了解它,也许它对其他人也有帮助。

我放弃之前的最后一次尝试是这个test.cmd

@echo off
set "x=randomstring1<>"\/=:randomstring2<ORIGINAL>mystring</ORIGINAL>randomstring3"
set "x=%x:*<ORIGINAL>=%"
set "x=%x:</ORIGINAL>*=%"
set  x=%x:~2%
echo %x%
pause
4

1 回答 1

2
@echo off
rem Let findstr to find the LINE you want (only once):
for /F "delims=" %%a in ('findstr "<ORIGINAL>" input.txt') do set "line=%%a"
ECHO LINE: "%line%"
rem Change left delimiter by {
set "line=%line:<ORIGINAL>={%"
rem Change right delimiter by }
set "line=%line:</ORIGINAL>=}%"
ECHO STRING DELIMITED: "%LINE%"
rem Get second token delimited by { and }
for /F "tokens=2 delims={}" %%a in ("%line%") do set string=%%a
ECHO STRING: "%STRING%"
rem Copy string to clipboard
REM echo %string%| clip

输出:

LINE: "randomstring2<ORIGINAL>mystring</ORIGINAL>randomstring3"
STRING DELIMITED: "randomstring2{mystring}randomstring3"
STRING: "mystring"

作为一个选项,您可以从行首删除到左分隔符:

set "line=%line:*<ORIGINAL>=%"

...并获得由您希望的任何分隔符分隔的第一个令牌(即:}):

for /F "delims=}" %%a in ("%line%") do set string=%%a
于 2013-01-06T03:56:20.647 回答