Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 搜索文件中的文本并将字符串作为变量返回_Batch File_Command Line_Scripting - Fatal编程技术网

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个前导空格-您需要指定这些事项

现在还不清楚您想要什么作为输出,但是

  • !!查尔斯:~0!是一样的!查理
  • “tokens=*”将抑制分配给元变量
    %%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