如何使用批处理脚本删除文件夹名称的前7个字符?

时间:2013-03-11 23:06:43

标签: windows command-line batch-file command-prompt

我做过研究,但我想不通,抱歉! Google只能帮助我添加字符,但不能删除字符...

在dir E:\Movies\2011\

下面说

有几个文件夹 e.g。

[0603] Movie_1

[0708] Movie_2

[0811] Movie_3

依旧......

所以我想运行批处理脚本来删除日期标记 即

Movie_1

Movie_2

Movie_3

等等

我使用的是Windows 8。

3 个答案:

答案 0 :(得分:3)

RENAMER.CMD

@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

答案 1 :(得分:0)

您可以使用增强型变量替换功能执行此操作(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以获得真正的工作完成。

答案 2 :(得分:0)

由于您使用的是Win8,因此您可以使用powershell来实现此目的。这是我以前转过来的

blah11-1 blah12-1 blah13-1

blah11 blah12 blah13

C:\测试> dir -Directory | foreach {if($ .Name.Length -gt 6){$ fileName = $ .Name.SubString(0,6)} else {$ fileName = $ .Name}; rename-item -path $ .fullname -newname $ fileName; }

现在这就是我在powershell命令行上运行的内容,但它可以移动到脚本中以使其更具可重用性。