在循环批处理脚本(Windows,批处理脚本)的路径中使用findstr命令变量扩展

乔伊·乔
echo off
set "MasterFolder=C:\Users\Development\test_folder"
SetLocal EnableDelayedexpansion
@FOR /f "delims=" %%f IN ('dir /b /s "%MasterFolder%\*.txt"') DO (
    set /a "idx+=1"
    set "FileName[!idx!]=%%~nxf"
    set "FilePath[!idx!]=%%~dpFf"
)

for /L %%i in (1,1,%idx%) do (
    echo [%%i] "!FileName[%%i]!"

    set "loc=%MasterFolder%\!FileName[%%i]!"
    echo path: %MasterFolder%\!FileName[%%i]!
    echo loc: !loc!
    FOR /F "tokens=1,2 delims=:" %%1 in ('findstr /o "^" "%MasterFolder%\test_1.txt"') DO (
        set new_pos=%%1
        echo new_pos !new_pos!
    )
)

上面的代码有效,但是,下面的代码无效。

echo off
... 
FOR /F "tokens=1,2 delims=:" %%1 in ('findstr /o "^" "%MasterFolder%\!FileName[%%i]!"') DO (
        set new_pos=%%1
        echo new_pos !new_pos!
    )
)
echo off
...
    FOR /F "tokens=1,2 delims=:" %%1 in ('findstr /o "^" "!loc!"') DO (
        set new_pos=%%1
        echo new_pos !new_pos!
    )
)

我所做的就是将test_1.txt替换为!FileName [%% i]!,或使用新变量并将其全部替换为“!loc!”

但是最后两个代码不起作用,我需要这种方式,因为它由第一个for循环自动在文件夹中获取文件名。

我猜在findstr或变量扩展顺序上都有错误,但是我很难弄清楚。

吉布

很明显!

使用时!file...,请在行中插入一个感叹号。

这触发了解析器的阶段5(延迟扩展阶段)
在该阶段,变量被扩展,并且插入号用于转义下一个字符,而与它们所在的位置(是否带引号)无关!

因此,您的搜索字符串"^"已转换为""

只需将插入符号加倍即可 findstr /o "^^" !File...

惊叹的效果有点出乎意料

setlocal EnableDelayedExpansion
echo One Caret "^"
echo One Caret "^" and a bang ^^!

输出量

一个插入符号“ ^”
一个插入符号“”和一声巨响!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Windows中获取批处理脚本的路径?

将powershell命令的输出保存在变量中并在批处理脚本中使用它吗?

如何在批处理脚本中增加循环变量?

批处理脚本命令自动停止批处理脚本

在FOR循环中设置变量并调用结果;批处理脚本窗口

在批处理脚本中使用git命令时,如何出错?

Windows批处理脚本:尝试通过使用管道循环命令结果来提取Java版本

在批处理脚本中使用变量而不是文件名进行循环

批处理脚本中的内部延迟扩展(Windows)

在批处理脚本中使用“查找”命令写入文件

Windows批处理-使用变量打破循环

在批处理脚本中使用带空格的路径

Windows批处理脚本指向正确的路径

如何在批处理脚本嵌套循环中处理变量?

嵌套for循环,在嵌套循环windows批处理中使用变量

批处理脚本循环

文件系统的批处理脚本:在另一个嵌套的for循环中使用for循环变量

嵌套for循环,设置变量以及是否在批处理脚本中

Windows批处理脚本,并使用“!”处理文件名 For循环中的感叹号

批处理脚本 - 循环中的动态/可变路径

在 Windows 批处理脚本中使用 FOR LOOP 创建多个文件

Windows 批处理脚本中的 sed 命令

循环计数器变量的批处理脚本未更新

使用批处理脚本的 Mongo 命令

用于迭代多值变量的 CALL 命令的批处理脚本

Windows 批处理循环变量以

Windows 批处理脚本 - 用于使用命令输出

无法在批处理脚本的循环内设置环境变量

如何在批处理脚本的“LEFT()”函数中使用变量