我有一个文件,其中包含带有文件名的路径列表,我需要在另一个文件中搜索这些路径,如果匹配则应该作为变量返回。
@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文件中的最后一行。
谢谢,
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
FINDSTR /L /b /e /g:2.txt 1.txt
IF ERRORLEVEL 1 (SET "file=") ELSE (FOR /f "tokens=*" %%a IN (2.txt) DO SET file=%%a)
ECHO file=%file%
GOTO :EOF
如果您想在2.txt
中的单行也出现在1.txt
中时设置变量,则上述内容应该有效。如果该行与file
中的一行匹配,则设置变量1.txt
,如果不匹配,则设置为空。
修订
@ECHO OFF
SETLOCAL
SET "file="
FOR /f "tokens=*" %%a IN (1.txt) DO IF NOT DEFINED file (
ECHO %%a|FINDSTR /L /i /b /e /g:2.txt >nul
IF NOT ERRORLEVEL 1 (SET file=%%a)
)
ECHO file=%file%
GOTO :EOF
嗯 - 是的,我忘了1.txt
有前导空格。我们来试试吧......
我的测试数据文件
1.txt的
test.xml
new\db\new.sql
new\old\test.sql
old\web\test.js
2.txt
new\db\new.sql
结果:
file=new\db\new.sql
我尝试删除最终l
并在最终z
之后追加l
来更改2.txt。结果两者都产生了file=
。
我可以通过在2.txt
中的文字之前或之后添加空格来打破它。
要直接从提示中运行,您需要将每个%%
减少到%
,否则您将收到您报告的消息。
编辑:给出新测试数据的最终修订
@ECHO OFF
SETLOCAL
SET "file="
FOR /f "tokens=*" %%a IN (1.txt) DO IF NOT DEFINED file (
FINDSTR /L /i "%%a" 2.txt >nul
IF NOT ERRORLEVEL 1 (SET file=%%a)
)
ECHO file=%file%
GOTO :EOF
答案 1 :(得分:0)
我们无法确定您的数据有7个前导空格 - 您需要指定此类事项。
目前还不清楚你想要什么作为输出,但是
%%a
的值的前导空格,而“delims =”将保留它们。因此,将字符设置为该行的所有前七个字符将会删除前七个 AFTER 前导空格已被删除。