Batch file 如何使用批处理删除多个文件中特定字符后的字符串?

Batch file 如何使用批处理删除多个文件中特定字符后的字符串?,batch-file,scripting,Batch File,Scripting,我一直试图删除_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 这是我写的一块蝙蝠,但这不起作用。如果有

我一直试图删除_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"
)

感谢查看您的第二个文件名,这是FOR/F循环的功能:

%%a=glik
%%b=trol
%%c=1
%%d=5
%%e=2_9_5.png
因此,移动命令变为:

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"
)
如果您熟悉正则表达式,那么可以使用MyHandy—一种混合JScript/批处理脚本,它通过对名称执行正则表达式查找和替换来重命名文件。是纯脚本,从XP开始在任何Windows计算机上本机运行。这是一种非常方便的方法,可以执行非常精确的重命名操作

假设您的当前目录中有,或者更好,路径中的某个地方有:

jren "^([^_]+_[^_]+_[^_]+)_.*(\.png)$" "$1$2" /i
不需要批次。如果确实在批处理脚本中使用该命令,则应在该命令前面加上
CALL
,因为JREN也是批处理脚本。

根据您的要求,“删除_1之后的一些字符”,似乎最好的解决方案是使用。不确定您是否会从中受益,但此解决方案也允许在
\u 1
之前使用不同数量的下划线,这与您现在使用的更静态的
“delims=\u”
不同

子字符串替换对于从开头剥离部分非常有用(例如,
set“var=%var:*\u 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"
@echo关闭
setlocal
对于(*.png)中的%%I,请调用:ren“%%~I”
后藤:EOF
:任
设置“pngfile=%~1”
回显“%pngfile%”|查找“|1”>num | |转到:EOF
设置pngfile=%pngfile:\u 1=&rem.%
echo ren“%~1”“%pngfile%\u 1.png”

感谢您的及时回复。最后我用你的建议纠正了我的错误。这就是我使用的:对于/f“tokens=1-4*delims=\%%a in('dir/a-d/b*.png')do(move“%%a\%%b\%%c\%%d\%%e”“%%a\%%b\%%c%%delims=\%%a in('dir a-d/b*.png')do(move“%%a\%%b\%%c\%%d%%d\%%d\%%e”“”),我使用它来更改看起来像这样的文件:glik trol\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。我不知道那是怎么发生的。Thanks@user2516780如果dbenham的回答有帮助,请将其标记为已接受。为了解释为什么这很重要,我最后用了他的更正。但谢谢你们两位的意见。确实帮了很多忙@用户2516780请参见编辑。我添加了一行代码来跳过不包含
\u 1
的png文件的重命名。如果您说您需要文件以
basename1.png
格式结束,请删除最后一行的下划线。谢谢!这很有效。。。我也纠正了另一个错误。谢谢