windows - 处理文件名中的特殊字符时批量重命名问题

标签 windows batch-file file-rename

我在 c:\files 中有数百个 *.mp3 文件。里面有所有可以想象到的文件名,例如

  • milad.mp3(表现良好)
  • 嘿你.mp3(文件名中有空格)
  • systemofadown.mp3(长文件名)
  • howdy(1).mp3(文件名中的括号)

以及最后三个条件的任意组合。 我想将文件重命名为 001-test.mp3, 002-mp3, ... 哪个文件使用哪个名称并不重要。 已经编写了一个批处理文件来进行重命名。这是我的代码(添加了行号):

01  rem @echo off
02  cls
03  set _number=%1
04  lfnfor on
05
06  :F1TO10
07  IF NOT EXIST *.mp3. goto end
08  if %_number% gtr 9 goto F10TO100
09  for /f %%a IN ('dir /b *.mp3') do rename %%~na.mp3 00%_number%-test.mp4
10  set /a _number +=1
11  goto F1TO10
12
13  :F10TO100
14  IF NOT EXIST *.mp3. goto end
15  if %_number% gtr 99 goto F100TO1000
16  for /f %%a IN ('dir /b *.mp3') do rename %%~na.mp3 0%_number%-test.mp4
17  set /a _number +=1
18  goto F10TO100
19
20  :F100TO1000
21  IF NOT EXIST *.mp3. goto end
22  if %_number% gtr 999 goto end
23  for /f %%a IN ('dir /b *.mp3') do rename %%~na.mp3 %_number%-test.mp4
24  set /a _number +=1
25  goto F100TO1000
26
27  :end
28  for /f %%a IN ('dir /b *.mp4') do rename %%~na.mp4 %%~na.mp3
29  echo Done

此代码适用于行为良好的文件名(即没有空格、没有括号、长度不超过 8 个字符)。但是,如果我有一个文件名行为不良的文件,脚本就会中断(它会无限循环,直到我使用 Ctrl-C 停止它)。

问题显然是文件名问题。如何解决这个问题?有任何想法吗?我非常感谢任何帮助。

最佳答案

尝试使用 %%~fsa.mp3 而不是 %%~na.mp3

http://www.ss64.org/viewtopic.php?id=93 结尾处给出的

或在长名称中添加引号..

关于windows - 处理文件名中的特殊字符时批量重命名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/684535/

相关文章:

windows - 网络问题,求建议

batch-file - 批处理文件 - 支持以百分号结尾的语法来访问参数

batch-file - 批处理 : echo to standard out without carriage return line feed

java file.renameTo() 在 unix 中失败

MySQL远程访问津贴

windows - 通过 Win32 api 在网络接口(interface)上启用/禁用 DHCP

windows - 批量重命名文件并在文件名已存在时覆盖 (windows)

linux - 使用 9 位序列号对文件进行排序和重命名

windows - 如何通过bat文件递归地将文件名从大写更改为小写

Java MySQL preparedStatement 批处理