如何从文本文件中的单引号('')读取和提取值并在另一个文件中找到该值,如果不退出则抛出错误

问题描述 投票:0回答:1

批处理文件脚本新手。需要您的帮助,从下面的文本文件 (file.txt) 中提取(单引号)'' 中的所有值,并在另一个文本文件中找到该值,如果不存在,则会抛出错误。

file.txt
Wed 11/01/2023 - 19:59:23.33 
BIP1138I: Applying overrides using runtime mqsiapplybaroverrides...
BIP1140I: Overriding property FTP_To_Trg#FtpServer with 'ftp.test.com' in 'App_Common_APP/META/broker.xml' ...
BIP1140I: Overriding property FTP_To_Trg#FileOut with 'ftp.test.com' in 'App_Common_APP/META/broker.xml' ...
BIP1140I: Overriding property Email#UDP_SysNm with 'SIT' in 'App_Common_APP/META/broker.xml' ...

我已经更新了文件路径并尝试了它不起作用,运行脚本后我没有看到任何事情发生,提供文件路径导致了问题?

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "delims=" %%e IN (C:\Users\k2\file.txt) DO FOR %%y IN (%%e) DO (
 SET "word=%%y"
 IF "!word:~0,1!!word:~-1!"=="''" (
  FIND "!word:~1,-2!" C:\Users\k2\result.txt>nul
  IF ERRORLEVEL 1 (>>C:\Users\k2 ECHO %%y) ELSE (>>C:\Users\k2 ECHO %%y)
 )
)

尝试使用文件名,但我没有看到任何情况发生,我还为文件路径提供了双引号(“”),这是问题吗?

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%e IN ("C:\Users\k2\file.txt") DO FOR %%y IN (%%e) DO (
 ECHO %%y
 SET "word=%%y"
 IF "!word:~0,1!!word:~-1!"=="''" (
 ECHO processing %%y
  FIND "!word:~1,-2!" "C:\Users\k2\result.txt">nul
  IF ERRORLEVEL 1 (>>"C:\Users\k2\Failure.txt" ECHO %%y) 
  ELSE (>>"C:\Users\k2\Success.txt" ECHO %%y)
 )
)


batch-file text-files
1个回答
0
投票

您应该能够适应这一点:

@ECHO Off&SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "delims=" %%e IN (q77438851.txt) DO FOR %%y IN (%%e) DO SET "word=%%y"&IF "!word:~0,1!!word:~-1!"=="''" FIND "!word:~1,-2!" q77438851_2.txt>nul&IF ERRORLEVEL 1 (>>u:\miss ECHO %%y) ELSE (>>u:\hit ECHO %%y)

(这只是证明它可以用两行完成)-重新格式化为更好的布局

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "delims=" %%e IN (q77438851.txt) DO FOR %%y IN (%%e) DO (
 SET "word=%%y"
 IF "!word:~0,1!!word:~-1!"=="''" (
  FIND "!word:~1,-2!" q77438851_2.txt>nul
  IF ERRORLEVEL 1 (>>u:\miss ECHO %%y) ELSE (>>u:\hit ECHO %%y)
 )
)

q77438851.txt
是我的测试文件,
q77438851_2.txt
是在其中查找找到的字符串的另一个文件。

读取从

q77438851.txt
%%e
的每一行,然后依次将
%%y
分配给每个空格分隔的字符串(注意:也使用
,;
作为分隔符)

将找到的“单词”分配给

word
,因为您无法对
metavariable
(
%%e %%y
)

进行子串化

查看

word
的第一个字符和最后一个字符是否都是
'
。如果是这样的话...

使用

word
定位第二个文件中从第二个到倒数第二个字符的
find
的子字符串,将
find
的输出定向到位仓,并将
errorlevel
设置为
0
(如果找到)并且如果没有找到,则非
0

将找到的引用单词(在

%%y
中)写入
hit
miss
文件(我的
U:
是内存驱动器)

显然,在运行之前需要清除所使用的目标文件 - 或者可以在脚本中删除它们。

子字符串处理 - 请参阅 docco 提示中的

set /?
或 SO 上的数千个示例。

编辑回应评论 - 仅第一个引用的字符串

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "usebackqdelims=" %%e IN ("q77438851.txt") DO SET "first=y"&FOR %%y IN (%%e) DO (
 SET "word=%%y"
 if defined first IF "!word:~0,1!!word:~-1!"=="''" (
  set "first="
  FIND "!word:~1,-2!" q77438851_2.txt>nul
  IF ERRORLEVEL 1 (>>u:\miss ECHO %%y) ELSE (>>u:\hit ECHO %%y)
 )
)

first
设置为每行读取的值。

如果定义了

first
并且它是引用的单词,则将
first
设置为 nothing(这意味着它变为未定义 - 但在读取下一行时将重新定义)

© www.soinside.com 2019 - 2024. All rights reserved.