Batch file 使用带有多个条件的IF语句

Batch file 使用带有多个条件的IF语句,batch-file,Batch File,我需要根据文件名更改多个文件名 我有这样命名的文件 001.mp3 002.mp3 003.mp3 004.mp3 005.mp3 ...etc 我编写了一些代码来实现我的目标,如下所示: @echo off for %%i in (*.mp3) do if %%~ni gtr 003 ren %%i %%~ni-new%%~xi 001.mp3 002.mp3 003.mp3 004-new.mp3 005-new.mp3 ...etc 001-chapter-1.mp3 002-cha

我需要根据文件名更改多个文件名

我有这样命名的文件

001.mp3
002.mp3
003.mp3
004.mp3
005.mp3
...etc
我编写了一些代码来实现我的目标,如下所示:

@echo off
for %%i in (*.mp3) do if %%~ni gtr 003 ren %%i %%~ni-new%%~xi
001.mp3
002.mp3
003.mp3
004-new.mp3
005-new.mp3
...etc
001-chapter-1.mp3
002-chapter-1.mp3
003-chapter-1.mp3
004-chapter-2.mp3
005-chapter-2.mp3
006-chapter-2.mp3
007-chapter-3.mp3
008-chapter-3.mp3
009-chapter-3.mp3
010-chapter-3.mp3
...etc
我已经成功地获得了如下预期结果:

@echo off
for %%i in (*.mp3) do if %%~ni gtr 003 ren %%i %%~ni-new%%~xi
001.mp3
002.mp3
003.mp3
004-new.mp3
005-new.mp3
...etc
001-chapter-1.mp3
002-chapter-1.mp3
003-chapter-1.mp3
004-chapter-2.mp3
005-chapter-2.mp3
006-chapter-2.mp3
007-chapter-3.mp3
008-chapter-3.mp3
009-chapter-3.mp3
010-chapter-3.mp3
...etc
但现在我正在尝试一些不同的东西,比如“
if
between”

例如:

@echo off
for %%i in (*.mp3) do 
if %%~ni between 001 && 003 ren %%i %%~ni-chapter-1%%~xi
if %%~ni between 004 && 006 ren %%i %%~ni-chapter-2%%~xi
if %%~ni between 007 && 020 ren %%i %%~ni-chapter-3%%~xi
if %%~ni between 021 && 030 ren %%i %%~ni-chapter-4%%~xi
if %%~ni between 031 && 045 ren %%i %%~ni-chapter-5%%~xi
因此,预期结果如下所示:

@echo off
for %%i in (*.mp3) do if %%~ni gtr 003 ren %%i %%~ni-new%%~xi
001.mp3
002.mp3
003.mp3
004-new.mp3
005-new.mp3
...etc
001-chapter-1.mp3
002-chapter-1.mp3
003-chapter-1.mp3
004-chapter-2.mp3
005-chapter-2.mp3
006-chapter-2.mp3
007-chapter-3.mp3
008-chapter-3.mp3
009-chapter-3.mp3
010-chapter-3.mp3
...etc

请帮助我按照演示的方式修复此代码。

通过从cmd运行
if/?
,您可以获得有关此问题的所有帮助,但这或多或少是在以下两者之间执行的想法:

@echo off
for %%i in (*.mp3) do (
  if %%~ni leq 003 ren %%i %%~ni-chapter-1%%~xi
  if %%~ni leq 006 if %%~ni gtr 003 ren %%i %%~ni-chapter-2%%~xi
  if %%~ni leq 020 if %%~ni gtr 006 ren %%i %%~ni-chapter-3%%~xi
  if %%~ni leq 030 if %%~ni gtr 020 ren %%i %%~ni-chapter-4%%~xi
  if %%~ni leq 045 if %%~ni gtr 030 ren %%i %%~ni-chapter-5%%~xi
)
直接从
if/?

其中,比较op可以是以下各项之一:


我想您可以使用延迟扩展并删除嵌套的
If
语句:

@Echo关闭
SetLocal EnableDelayedExpansion
设置“i=”
对于/F“Delims=“%%A In('Where.:?.mp3 2^>Nul'),请执行以下操作:(
如果1%%~nA全球技术法规1000设置为“i=1”
如果1%%~nA全球技术法规1003设置“i=2”
如果1%%~nA全球技术法规1006设置“i=3”
如果1%%~nA全球技术法规1020设置“i=4”
如果1%%~nA全球技术法规1030设置“i=5”
如果1%%~nA全球技术法规1045设置“i=”
如果定义为i Ren“%%A”“%%~nA章-!i!%%~xA”
)

在上面的示例中,我使用了
Where
命令将返回的元变量限制为那些具有
3
字符基名称的元变量。这将防止再次循环浏览任何重命名的文件(因为您正在使用相同的扩展名在同一目录中重命名它们,该扩展名仍然与您的
*.mp3
模式匹配)


请注意,这只会过滤包含三个字符的
.mp3
文件,不会确定这些字符是否都是整数。我将让您自己决定是否要实施类似的措施。

我建议您注意这一点。这已包含您所需的所有信息。请参阅
if/?
查找
lss
eq
等。非常肯定您拒绝阅读帮助文件以了解有关此代码的任何问题。