Batch file 搜索文件中的文本并将字符串作为变量返回
我有一个包含路径列表和文件名的文件,我需要在另一个文件中搜索这些路径,如果它匹配,应该作为变量返回Batch file 搜索文件中的文本并将字符串作为变量返回,batch-file,command-line,scripting,Batch File,Command Line,Scripting,我有一个包含路径列表和文件名的文件,我需要在另一个文件中搜索这些路径,如果它匹配,应该作为变量返回 @echo off setlocal enabledelayedexpansion for /f "tokens=*" %%a in (D:\newfolder\1.txt) do ( set line=%%a set chars=!line:~7! echo !chars:~0! >> D:\automation\2.txt echo !chars:~0! echo Find "!
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (D:\newfolder\1.txt) do (
set line=%%a
set chars=!line:~7!
echo !chars:~0! >> D:\automation\2.txt
echo !chars:~0!
echo Find "!chars:~0!" D:\newfolder\lastlines.txt >>3.txt
echo Find "!chars:~0!" D:\newfolder\lastlines.txt
Find "!chars:~0!" D:\newfolder\lastlines.txt
)
if %errorlevel% equ 1 ( goto notfound
echo set file = "!chars:~0!"
:notfound
1.txt
test.xml
new\db\new.sql
new\old\test.sql
old\web\test.js
2.txt
[exec] E:\source\testing\ui\r.aspx(212): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\r.aspx(213): warning JS1187: Variable '' might not be initialized [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\n.aspx(14): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\n.aspx(112): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\n.aspx(127): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\n.aspx(185): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\n.aspx(213): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] E:\source\testing\ui\n.aspx(237): warning JS1204: Not all required arguments have been supplied [E:\source\testing\old\web\v.wdproj]
[exec] e:\source\testing\ui\P.aspx.cs(25): warning CS0414: The field '' is assigned but its value is never used [E:\source\testing\old\web\v.wdproj]
[exec]
[exec]
[exec] "E:\source\testing\old\web\v.wdproj" (default target) (1) ->
[exec] (AspNetCompiler target) ->
[exec] E:\source\testing\old\web\test.js(8): error : Variable '' has not been declared [E:\source\testing\old\web\v.wdproj]
[exec]
[exec] 1 Error(s)
[exec]
这里我无法检索匹配的行(new\db\test.sql),它返回1.txt文件中的最后一行
谢谢,我们无法计算出您的数据有7个前导空格-您需要指定这些事项 现在还不清楚您想要什么作为输出,但是
%%a的值的前导空格,而“delims=”将保留它们
@ECHO off
SETLOCAL
FINDSTR/L/b/e/g:2.txt 1.txt
如果ERRORLEVEL 1(SET“file=”)ELSE(对于/f“tokens=*”(2.txt)中的%%a,则设置文件=%%%a)
回显文件=%file%
后藤:EOF
如果您想设置一个变量,如果2.txt
中的单行也出现在1.txt
中,则上述操作应该有效。如果行与1.txt
中的一行匹配,将设置变量file
,如果不匹配,则为空
修改
@ECHO关闭
SETLOCAL
设置“文件=”
对于(1.txt)文件中的/f“tokens=*”%%a,如果未定义,则不执行(
ECHO%%a | FINDSTR/L/i/b/e/g:2.txt>nul
如果不是错误级别1(设置文件=%%a)
)
回显文件=%file%
后藤:EOF
嗯-是的,我忘了1.txt
有前导空格。让我们试试这个
我的测试数据文件
1.txt 2.txt 结果:
file=new\db\new.sql
我尝试通过删除最后一个l
并在最后一个l
之后附加一个z
来更改2.txt。结果两者都产生了file=
我可以通过在2.txt
中的文本前后添加空格来打破它
为了直接从提示符运行,您需要将每个%%
减少到%%
,否则您将得到报告的消息
编辑:给出新测试数据的最终版本
@ECHO关闭
SETLOCAL
设置“文件=”
对于(1.txt)文件中的/f“tokens=*”%%a,如果未定义,则不执行(
FINDSTR/L/i“%%a”2.txt>nul
如果不是错误级别1(设置文件=%%a)
)
回显文件=%file%
后藤:EOF
解决“我的代码没有完成我希望它完成的任务”这样的问题非常困难“没有理想结果的例子。例如,使用~7
似乎没有任何意义-您试图与返回的内容进行匹配的内容是什么?实际上1.txt文件有7个空格,后面跟着路径,所以我使用了~7这对我来说没关系,我会处理它,但我无法使用find(可能是最后几行代码…)检索实际结果,谢谢,但它显示空输出。echo文件显示为空白,但该行存在,并且2.txt中的所有文本都是段落形式。它不起作用,但当我逐行运行此代码时,它显示%%a在此时是意外的,我可以看到错误级别也没有更改,但结果显示为空白谢谢,它工作了,但是在2.txt文件中,我修改了一个大段落中的文本,现在“new\db\new.sql”被附加了一些额外的路径,如“D:\test\new\db\new.sql”,因为这个脚本不工作。。。可能是一个小的变化是必需的..将不得不看到数据。您可以通过单击标签下方的edit
来编辑原始帖子。您需要包括任何注释,如“1.txt每行有7个前导空格”,这是相关的。空格有点难看,它们是否在行的末尾。。。
new\db\new.sql
file=new\db\new.sql