使用批处理重命名文件

时间:2010-10-12 21:06:23

标签: batch-file

我有一个文件夹,里面有文件x_blah.blah y_ho.hum z_hi.ho,我只需要删除下划线和下划线左边的所有内容,所以我留下了blah.blah ho.hum hi.ho < / p>

2 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

setlocal enabledelayedexpansion

for %%i in (*_*) do (
   set old_name=%%i
   set new_name=!old_name:*_=!
   move "!old_name!" "!new_name!"
)

解释:

  • setlocal enabledelayedexpansion启用所谓的延迟变量展开,这是一项功能,例如允许你在循环内取消引用变量
  • for %%i in (*_*) do启动当前目录中至少有一个_的所有文件名的循环,并将该文件名分配给循环变量%%i
  • set old_name=%%i将循环变量的内容分配给名为old_name的常规变量
  • set new_name=!old_name:*_=!对变量old_name的内容执行了一些不错的字符串替换,将第一个__之前的所有字符替换为空。结果存储在new_name中。有关更多详细信息,请参阅SET命令的帮助(在命令行中键入help set)。
  • move "!old_name!" "!new_name!"最后是发出的命令,用于将每个文件从旧名称重命名为新名称

<强>更新

要浏览所有子文件夹中的文件,您可以使用for循环的FOR /R变体。要从当前目录开始,请将循环标题更改为:

for /r %%i in (*_*) do (

但是您还需要考虑到循环变量现在包含文件名的完全限定路径,因此您还必须稍微更改循环体以仅替换文件名:

for /r %%i in (*_*) do (
   set file_path=%%~dpi
   set old_file_name=%%~nxi
   set new_file_name=!old_file_name:*_=!
   move "!file_path!!old_file_name!" "!file_path!!new_file_name!"
)

希望有所帮助。

答案 1 :(得分:2)

Windows批处理

@echo off

FOR %%i in (PREFIX*.txt) DO (set file=%%i) & CALL :rename
GOTO :eof

:rename
REN "%file%" "%file:~6%"
GOTO :eof

您需要将6调整为前缀的长度。所以对于你的例子,你可以这样做:

@echo off

FOR %%i in (x_*.txt) DO (set file=%%i) & CALL :rename
GOTO :eof

:rename
REN "%file%" "%file:~2%"
GOTO :eof

的Linux

Linux有多种解决方案,其中之一就是:

rename 's/^x_//' *

其中x_是前缀。