使用下面的代码我在文件名末尾添加文本:
1.mp3
2.mp3
应该是:
1text.mp3
2text.mp3
但它变成了:
1.mp3text
2.mp3text
代码:
@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
答案1
如何在多个文件名末尾添加“文本”。
之前: 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
笔记:
- 批处理文件可以处理任意长度的文件名,例如,
12345.mp3
将重命名为12345text.mp3
cmd
壳牌解决方案
您不需要使用批处理文件。您只需使用:
cd C:\Users\user123\Desktop\mp3\
ren ?.mp3 ?text.mp3
或者:
ren *.mp3 ?text.mp3
请注意以下才不是工作:
ren *.mp3 *text.mp3
您将获得类似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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 为了- 有条件地对多个文件执行命令。
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。
答案2
?
您可以使用至少与原始名称一样长的一系列文本添加到任何文件名的末尾(第一个点之前,通常是扩展名的开头) 。
ren "C:\Users\user123\Desktop\mp3\*.mp3" ??????????????????????text.*
贪婪?
匹配并保留任何字符除了 .
,如果字符用完,则可以自由地不匹配任何内容。然后附加您的文本,然后.*
匹配并保留点和名称的其余部分。
您可以根据需要修改源文件掩码以匹配您想要的任何文件。源掩码完全独立于重命名掩码。
看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
请注意,务必使用 FOR /F,而不是简单的 FOR。FOR /F 在开始迭代之前会收集 DIR 命令的整个结果,而简单的 FOR 在内部缓冲区已满后才开始迭代,这会增加多次重命名同一文件的风险。
我使用EOL=:
来防范文件名以 开头的可能性;
。默认 EOL 是;
,它会忽略以 开头的行;
。文件名不能包含:
,因此它是用于 EOL 选项的安全字符。
FOR /F 和 DIR /B 的一个小缺点是它不保留路径信息,这就是我一开始使用 PUSHD 的原因。如果没有 PUSHD,您可以在 DIR 命令中包含路径信息,但您还需要在 REN 源掩码中包含路径。以下一行程序在命令行上运行(无批处理脚本):
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"
另一种方法是使用 FINDSTR 命令列出文件,这样可以方便地保留路径信息:
for /f "delims=" %F in ('findstr /m "^" "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "%F" "%~nFtext%~xF"
由于列出的每个文件都以驱动器号开头,因此可以安全地使用默认值EOL=;
。
最后一个选择 - 你可以使用我的JREN.BAT 正则表达式重命名实用程序。它是纯脚本(混合 JScript/batch),可以在 XP 及以上版本的任何 Windows 机器上本地运行。
jren "(.*)(\.mp3)$" "$1text$2" /i /p "C:\Users\user123\Desktop\mp3"
由于 JREN 是一个批处理脚本,因此如果在另一个批处理脚本中使用该命令,则需要使用 CALL JREN。
答案3
在这种情况下,搜索文本中带有正则表达式的 PowerShell Rename-Item 命令将会起作用。
Get-ChildItem -Filter '*mp3' -Recurse | Rename-Item -NewName {$_.name -replace '(.*)\.mp3','$1text.mp3'}
是(.*)
一个正则表达式组,其中.
匹配除换行符之外的任何字符,而*
匹配 零次或多次。\.
匹配 mp3 之前的句点。然后在替换文本中,$1
插入在第一个组中匹配的文本(.*)
,后跟要结尾的其余文本。
这适用于可变长度的文件名以及包含空格、下划线和其他字符组合的文件名。
答案4
它必须在批处理文件中完成吗?高级重命名器是一款免费且功能强大的批量重命名文件或文件夹的程序。轻松解决您的问题。