在多个条件下使用IF语句

时间:2019-03-26 12:42:51

标签: 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

但是现在我正在尝试类似'if之间的东西'。

例如:

@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

所以期望的结果将是这样:

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

请帮助我修复该代码,如所示。

2 个答案:

答案 0 :(得分:0)

您可以通过从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 /?

  

其中compare-op可能是以下之一:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

答案 1 :(得分:0)

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

@Echo Off
SetLocal EnableDelayedExpansion
Set "i="
For /F "Delims=" %%A In ('Where .:???.mp3 2^>Nul')Do (
    If 1%%~nA Gtr 1000 Set "i=1"
    If 1%%~nA Gtr 1003 Set "i=2"
    If 1%%~nA Gtr 1006 Set "i=3"
    If 1%%~nA Gtr 1020 Set "i=4"
    If 1%%~nA Gtr 1030 Set "i=5"
    If 1%%~nA Gtr 1045 Set "i="
    If Defined i Ren "%%A" "%%~nA-chapter-!i!%%~xA"
)

在上面的示例中,我使用了Where命令将返回的元变量限制为具有3字符基名的元变量。 。

这将防止再次循环遍历任何重命名的文件(因为您正在使用相同的扩展名在相同目录中重命名它们,但仍然与您的*.mp3模式匹配)

请注意,此操作仅过滤具有三个字符的.mp3文件,而不能确定这些字符都是整数。我会让您决定是否要自己执行类似的操作。