我有一个位于不同文件夹中的批处理脚本。 (\ test remove \)
我希望从另一个文件夹中的所有.csv中删除14个字符(\ test remove \ remove from here \)它删除字符的文件夹可以是任何地方(子目录就是一个例子)
当我运行我的脚本时,它会删除批处理脚本所在文件夹中的字符。
setlocal EnableDelayedExpansion
set removeFileLocation="C:\...\Desktop\test remove\remove from here\"
for /r %removeFileLocation% %%x in (*.csv) do (
set "oldname=%%~Nx"
set "newname=!oldname:~,-14!"
ren "!oldname!.csv" "!newname!.csv"
)
当运行时,我得到“系统无法找到指定的文件”。但是它仍然成功地从.csv文件中删除了字符。
答案 0 :(得分:0)
我建议你试试
setlocal EnableDelayedExpansion
set "removeFileLocation=C:\...\Desktop\test remove\remove from here"
for /f %%x in (' dir/s/b/a-d "%removeFileLocation%\*.csv" ') do (
set "oldname=%%~Nx"
set "newname=!oldname:~,-14!"
ECHO ren "%%~dpx!oldname!.csv" "!newname!.csv"
)
注意:
set "removeFileLocation...
已更改(1),以便"rabbit's ears"
包含整个分配,这可确保在指定的值中包含尾随空格 NOT 。 (2)删除尾随\
。 (这是个人选择的问题)
FOR/F
仅在完整文件名的内存中构建DIR
列表(无标题)
ren
需要恢复文件名的驱动器和路径。
ren
仅ECHO
以确保操作正确。删除ECHO
关键字以激活重命名。
我认为您的原始版本发生的事情是for/r
重新遇到已经重命名的文件或者因为您没有为要重命名的文件指定路径名,所以它找到了{{ 1}}在某个子目录中并尝试在当前目录中重命名它,但它在那里不存在或者已经在那里重命名。