搜索文件中的文本并将字符串作为变量返回

时间:2013-12-24 07:01:37

标签: 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  "!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文件中的最后一行。

谢谢,

2 个答案:

答案 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个前导空格 - 您需要指定此类事项。

目前还不清楚你想要什么作为输出,但是

  1. 字符:〜0!与!chars!
  2. 完全相同
  3. “tokens = *”将禁止分配给元变量%%a的值的前导空格,而“delims =”将保留它们。
  4. 因此,将字符设置为该行的所有前七个字符将会删除前七个 AFTER 前导空格已被删除。