1

我有一个位于不同文件夹中的批处理脚本。(\测试删除\)

我希望从另一个文件夹( \test remove\remove from here\ )中的所有 .csv 中删除 14 个字符,它从中删除字符的文件夹可能在任何地方(子目录是一个示例)

  • 小背景,14 个字符是时间戳(YYYYMMDDHHMMSS),希望从 .csv 文件中删除时间戳

当我运行我的脚本时,它会从批处理脚本所在的文件夹中删除字符。

 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 文件中删除了字符。

4

1 回答 1

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"包含整个分配,这确保尾随空格包含在分配的值中。\(2)去除尾随。(这是个人选择的问题)

仅在完整文件名的内存中FOR/F构建一个DIR列表(无标题)

ren需要恢复文件名的驱动器和路径。

renECHO用于确保操作正确。删除ECHO关键字以激活重命名。

我认为您的原始版本正在发生的事情for/r是重新遇到一个已经重命名的文件,或者由于您没有为要重命名的文件分配路径名,它.csv在某个子目录中找到 a 并尝试在当前目录,但它在那里不存在或已在那里重命名。

于 2013-07-23T02:25:50.643 回答