gpt4 book ai didi

windows - 在for循环批处理脚本(windows,批处理脚本)中的路径中findstr命令变量扩展

转载 作者:行者123 更新时间:2023-12-03 11:10:19 25 4
gpt4 key购买 nike

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]! ,或使用新变量并将所有变量替换为 “!定位!” .

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

我想在 findstr 或变量扩展顺序中存在错误,但我很难弄清楚。

最佳答案

很明显!
使用时 !file... ,您在行中引入一个感叹号。
这会触发 phase 5 (delayed epxansion phase) of the parser .
在那个阶段,变量被扩展 和插入符号用于转义下一个字符 ,独立于它们的位置(引用与否)!
因此,您的搜索字符串 "^"转换为 "" .
只需将插入符号加倍到 findstr /o "^^" !File...感叹号效果有点出乎意料

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

One Caret "^"
One Caret "" and a bang !

关于windows - 在for循环批处理脚本(windows,批处理脚本)中的路径中findstr命令变量扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60526640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com