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] 删除。
我来说两句