我确实做了研究,但我无法弄清楚,对不起!谷歌只能帮我添加字符,不能删除字符...
在目录下说E:\Movies\2011\
有几个文件夹,例如
[0603] Movie_1
[0708] Movie_2
[0811] Movie_3
等等..
所以我想运行一个批处理脚本来删除日期标签,即
Movie_1
Movie_2
Movie_3
等等
我正在使用 Windows 8。
我确实做了研究,但我无法弄清楚,对不起!谷歌只能帮我添加字符,不能删除字符...
在目录下说E:\Movies\2011\
有几个文件夹,例如
[0603] Movie_1
[0708] Movie_2
[0811] Movie_3
等等..
所以我想运行一个批处理脚本来删除日期标签,即
Movie_1
Movie_2
Movie_3
等等
我正在使用 Windows 8。
重命名命令
@echo off
setlocal enableextensions enabledelayedexpansion
for %%i in (*) do (set name=%%i && ren "!name!" "!name:~7!")
endlocal
解释:
setlocal / endlocal的东西只是确保无论您的默认命令行设置是什么,脚本都能正常工作。如果您确保默认启用命令扩展和延迟扩展,或者使用cmd /e:on /v:on启动命令提示符,则这些行是可选的。
for语句是事情的核心。它使用(*)选择目录中的每个文件。如果您只想更改具有某些扩展名的文件,您可以使用不同的模式,例如(*.avi)。然后!name:~7! 去掉前面的七个字符。 放 /?列出了您可以执行的其他一些操作。大多数示例使用%而不是! 但所有字符串操作都适用于两者。
更新以回答评论
您可以在 ! 中执行 % 替换 替代。
@echo off
setlocal enableextensions enabledelayedexpansion
set numtrim=7
for %%i in (*) do (set name=%%i && ren "!name!" "!name:~%numtrim%!")
endlocal
由于您使用的是 Win8,因此您也可以使用 powershell 来完成此操作。这是我以前转的
blah11-1 blah12-1 blah13-1
至
废话11 废话12 废话13
C:\testing> dir -目录 | foreach { if($ .Name.Length -gt 6){ $fileName = $ .Name.SubString(0,6)} else { $fileName = $ .Name }; 重命名项目 -path $ .fullname -newname $fileName; }
现在这只是我在 powershell 命令行上运行的内容,但可以将其移动到脚本中以使其更具可重用性。
您可以使用增强的变量替换功能来执行此操作(SET /?
仅供参考):
@echo off
setlocal
for /d %%i in (*) do call :rename %%i
goto :eof
:rename
set CURDIR=%1
echo ren "%CURDIR%" "%CURDIR:~7%"
魔法发生在%CURDIR:~7%
,这意味着“ 的值%CURDIR%
,但跳过前 7 个字符”。
上面的批处理文件没有重命名任何东西(它只是打印重命名命令),所以你可以先做一个空运行,然后删除最后一个echo
来完成真正的工作。