批处理文件删除目录名的前缀



我正在尝试删除一些目录的前缀。

我有很多目录的名字像'991234','991235','991236'。我想从这些文件夹名称中删除'99'。结果需要是目录的重命名。它们应该被重命名为'1234','1235','1236'。

经过一番搜索,我可以写这个脚本:

for /f "tokens=*" %%a in ('dir 99* /A:D /b') do ren "%%a" "00_%%a"

此脚本查找所有以'99'开头的目录,并为每个目录调用ren。问题是我无法删除'99'部分以应用于文件夹名称。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: I use a test directory name that includes spaces to verify that the routine works with such directorynames
:: Use SET "sourcedir=." for the current directory
SET "sourcedir=u:your filest w o"
for /f "tokens=*" %%a in ('dir /A:D /b "%sourcedir%99*"') do SET "dirname=%%a"&ECHO ren "%sourcedir%%%a" "!dirname:~2!"
GOTO :EOF

元变量%%a需要赋值给一个用户变量进行操作。由于user变量将在代码块中更改值,因此需要调用delayedexpansion

参见for /?set /?的文档,以及Stephan的delayeexpansion链接:https://stackoverflow.com/a/30284028/2128947

所需的REN命令仅用于测试目的的ECHO验证命令是否正确后,将ECHO REN更改为REN以实际重命名目录。

在应用于实际数据之前,始终针对测试目录进行验证。