我一直试图在_1之后删除一些字符并重命名该文件但卡住了。让我输入示例文件名以明确说明。
aero_name_1_3_7.png
glik_trol_1_5_2_9_5.png
this_that_1_3_1_9.png
....... and so on.
所以我的文件名包含确切的格式但名称不同,因此我想使用令牌和delim。重命名我的文件后应该看aero_name_1.png,glik_trol_1.png,this_that_1.png 这是我写的那条蝙蝠,但这不起作用。如果有人可以建议,那就太好了。
for /F "tokens=1-4,* delims=_" %%a in ('dir /A-D /B "*.png"') do (
move "%%a_%%b" "%%a%%~xb"
)
由于
答案 0 :(得分:1)
查看您的第二个文件名,这就是FOR / F循环所具有的内容:
%%a=glik
%%b=trol
%%c=1
%%d=5
%%e=2_9_5.png
所以你的MOVE命令变为:
move "glik_trol" "glik"
请注意,%%b
没有扩展程序
您可以使用
for /f "tokens=1-3* delims=_" %%a in ('dir /a-d /b *.png') do (
move "%%a_%%b_%%c_%%d" "%%a_%%b_%%c%%~xd"
)
如果您对正则表达式感到满意,那么您可以使用我方便的JREN.BAT utility - 一个混合JScript /批处理脚本,它通过执行正则表达式查找和替换名称来重命名文件。 JREN.BAT是纯脚本,可以在XP以后的任何Windows机器上本机运行。这是一种非常方便的方法,可以执行非常精确的重命名操作。
假设您当前目录中有JREN.BAT,或者更好,在PATH中的某个位置:
jren "^([^_]+_[^_]+_[^_]+)_.*(\.png)$" "$1$2" /i
不需要批次。如果您在批处理脚本中使用该命令,那么您应该在命令前加CALL
,因为JREN也是一个批处理脚本。
答案 1 :(得分:1)
根据您的要求,"删除_1"之后的一些字符,似乎最好的解决方案是使用substring substitution。不确定您是否会从中受益,但此解决方案也允许在_1
之前提供可变数量的下划线 - 与您现在使用的"delims=_"
更静态使用不同。
子串替换很适合从开头剥离部分(例如set "var=%var:*_1=%"
),但剥离结束有点棘手。一种方法是将rem
推入替换。
试试这个:
@echo off
setlocal
for %%I in (*.png) do call :ren "%%~I"
goto :EOF
:ren <filename>
set "pngfile=%~1"
echo "%pngfile%" | find "_1" >NUL || goto :EOF
set pngfile=%pngfile:_1=&rem.%
echo ren "%~1" "%pngfile%_1.png"