在多个文件名的末尾添加“文本”

use*_*123 5 windows batch-file batch-rename

使用下面的代码,我将文本添加到文件名的末尾,它们是:

1.mp3
2.mp3
Run Code Online (Sandbox Code Playgroud)

并且应该是:

1text.mp3
2text.mp3
Run Code Online (Sandbox Code Playgroud)

但它变成了:

1.mp3text
2.mp3text
Run Code Online (Sandbox Code Playgroud)

代码:

@ECHO ON

FOR %%A IN ("C:\Users\user123\Desktop\mp3\*.mp2") DO (
    CALL :RenameFiles "%%~A" "%%~NXA"
)
GOTO EOF

:RenameFiles

SET fname=%~2
SET renname=%fname=%
REN "%~1" "%renname%text%"
GOTO E
Run Code Online (Sandbox Code Playgroud)

dbe*_*ham 6

您可以使用?至少与原始名称一样长的一系列文本,将文本添加到任何文件名的末尾(在第一个点之前,通常是扩展名的开头)。

ren "C:\Users\user123\Desktop\mp3\*.mp3" ??????????????????????text.*
Run Code Online (Sandbox Code Playgroud)

?贪婪地比赛和蜜饯的任何字符,除了 .,并且是免费的,如果它运行的字符匹配了什么。然后附加您的文本,然后.*匹配并保留点和名称的其余部分。

您可以根据需要修改源文件掩码以匹配您想要的任何文件。源掩码完全独立于重命名掩码。

请参阅Windows RENAME 命令如何解释通配符?想要查询更多的信息。

如果您的某些文件.的名称中包含多个文件,则您不能单独使用简单的 REN 命令。一种选择是使用批处理脚本:

@echo off
pushd "C:\Users\user123\Desktop\mp3\*.mp3"
for /f "delims= eol=:" %%F in ('dir /b /a-d *.mp3') do ren "%%F" "%%~nFtext%%~xF"
popd
Run Code Online (Sandbox Code Playgroud)

请注意,使用 FOR /F 而不是简单的 FOR 至关重要。FOR /F 在开始迭代之前收集 DIR 命令的整个结果,而简单 FOR 在内部缓冲区已满后开始迭代,这增加了多次重命名同一文件的风险。

EOL=:用来防止文件名以;. 默认的 EOL 是;,它会忽略以 开头的行;。文件名不能包含:,因此它是用于 EOL 选项的安全字符。

FOR /F 和 DIR /B 的一个小缺点是它不保留路径信息,这就是我一开始使用 PUSHD 的原因。如果没有 PUSHD,您可以在 DIR 命令中包含路径信息,但是您还需要在 REN 源掩码中包含路径。下面的一个 liner 在命令行上工作(没有批处理脚本):

for /f "delims= eol=:" %F in ('dir /b /a-d "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "C:\Users\user123\Desktop\mp3\%F" "%~nFtext%~xF"
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用 FINDSTR 命令列出文件,这样可以方便地保留路径信息:

for /f "delims=" %F in ('findstr /m "^" "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "%F" "%~nFtext%~xF"
Run Code Online (Sandbox Code Playgroud)

由于列出的每个文件都以驱动器号开头,因此使用默认的EOL=;.

最后一种选择 - 您可以使用我的JREN.BAT 正则表达式重命名实用程序。它是纯脚本(混合 JScript/批处理),可以在 XP 以后的任何 Windows 机器上本地运行。

jren "(.*)(\.mp3)$" "$1text$2" /i /p "C:\Users\user123\Desktop\mp3"
Run Code Online (Sandbox Code Playgroud)

由于 JREN 是一个批处理脚本,如果您在另一个批处理脚本中使用该命令,则需要使用 CALL JREN。


Dav*_*ill 3

如何将“文本”添加到多个文件名的末尾。

之前:1.mp3 2.mp3

之后:1text.mp3 2text.mp3

您的批处理文件中有多个错误,例如:

  • *.mp2应该*.mp3
  • goto E- 标签:E丢失。
  • 你不需要做call任何事。

简单的工作批处理文件

rem @echo off
setlocal
setlocal enabledelayedexpansion
for %%a in ("C:\Users\user123\Desktop\mp3\*.mp3") do (
    copy "%%a" "%%~dpnatext%%~xa"
    del "%%a" 
)
endlocal
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 批处理文件将适用于任何长度的文件名,因此例如12345.mp3将重命名为12345text.mp3

cmd外壳解决方案

您不需要使用批处理文件。你可以只使用:

cd C:\Users\user123\Desktop\mp3\
ren ?.mp3 ?text.mp3
Run Code Online (Sandbox Code Playgroud)

或者:

ren *.mp3 ?text.mp3
Run Code Online (Sandbox Code Playgroud)

请注意,以下内容不起作用

ren *.mp3 *text.mp3
Run Code Online (Sandbox Code Playgroud)

您将获得1.mp3text.mp3与该命令类似的文件名。

例子:

F:\test>dir *.mp3
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

29/11/2015  12:52                 0 1.mp3
29/11/2015  12:52                 0 2.mp3
               2 File(s)              0 bytes
               0 Dir(s)  1,777,665,769,472 bytes free

F:\test>ren ?.mp3 ?text.mp3

F:\test>dir *.mp3
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

29/11/2015  12:52                 0 1text.mp3
29/11/2015  12:52                 0 2text.mp3
               2 File(s)              0 bytes
               0 Dir(s)  1,777,665,769,472 bytes free
Run Code Online (Sandbox Code Playgroud)

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有内容的绝佳参考。
  • for - 有条件地对多个文件执行命令。
  • 参数- 命令行参数(或参数)是传递到批处理脚本中的任何值。

  • 使用简单的 FOR 会带来多次重命名文件的风险 - 不好 :-( 最好将 FOR /F 与 DIR /B 一起使用。此外,在这种情况下,使用多个“?”可以很好地使用简单的 REN 和更长的内容有关详细信息,请参阅[我的答案](http://superuser.com/a/1006862/109090)。 (2认同)