我有一个文件夹,里面有文件x_blah.blah y_ho.hum z_hi.ho,我只需要删除下划线和下划线左边的所有内容,所以我留下了blah.blah ho.hum hi.ho < / p>
答案 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)
@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有多种解决方案,其中之一就是:
rename 's/^x_//' *
其中x_
是前缀。