用于安排文件名的循环的CMD代码If else Contain语句

时间:2019-03-11 05:32:18

标签: batch-file if-statement

这是我在CMD批处理中的功能。目的是根据不同的名称对9个文件夹进行分类,例如,如果名称包含109,则文件将排列到109文件夹中。但是,我在这里只能为循环写9个

(文件夹名称是使用电话号码101-109,文件格式为date-phone1-phone2--record id 某些记录ID将重复,因为自动寻线设置)

for /r %%i in (*) do ( 
If %%i contains '-101-' (move %%i 101)
else if %%i contains '-102-' (move %%i 102))

但这是行不通的。我也尝试在( -101-)中使用If %% i,但也没有任何效果。有没有一种简单的方法可以编写forloop进行排序,而不是要求循环9次。

setlocal

set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%

cd C:\Users\SQ\Desktop\MWRecord
IF EXIST %year% (cd %year%) ELSE (mkdir %year% & cd %year%)
IF EXIST %year%%month% (cd %year%%month%) ELSE (mkdir %year%%month% & cd %year%%month%)
IF EXIST %year%%month%%day% (cd %year%%month%%day%) ELSE (cd ..\.. & move %year%%month%%day% %year%\%year%%month% & cd %year%\%year%%month%\%year%%month%%day%)

for /r %%i in (*-101-*) do ( IF EXIST 101 (move %%i 101) ELSE (mkdir 101 & move %%i 101))
for /r %%i in (*-102-*) do ( IF EXIST 102 (move %%i 102) ELSE (mkdir 102 & move %%i 102))
for /r %%i in (*-103-*) do ( IF EXIST 103 (move %%i 103) ELSE (mkdir 103 & move %%i 103))
for /r %%i in (*-104-*) do ( IF EXIST 104 (move %%i 104) ELSE (mkdir 104 & move %%i 104))
for /r %%i in (*-105-*) do ( IF EXIST 105 (move %%i 105) ELSE (mkdir 105 & move %%i 105))
for /r %%i in (*-106-*) do ( IF EXIST 106 (move %%i 106) ELSE (mkdir 106 & move %%i 106))
for /r %%i in (*-107-*) do ( IF EXIST 107 (move %%i 107) ELSE (mkdir 107 & move %%i 107))
for /r %%i in (*-108-*) do ( IF EXIST 108 (move %%i 108) ELSE (mkdir 108 & move %%i 108))
for /r %%i in (*-109-*) do ( IF EXIST 109 (move %%i 109) ELSE (mkdir 109 & move %%i 109))

endlocal

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

@echo off

for /L %%A IN (101 1 109) do (
    for /F "delims= eol=" %%B IN ('dir /S /B /A-D "*-%%A-*"') do (
        md "%%A" 2>nul
        move "%%~fB" "%%A"
    )
)

但是,如果文件同时包含101102,并且您想将其移动到102文件夹中,则此操作将无法完全正常工作。

因此,我推荐以下非常复杂的代码:

@echo off
setlocal EnableDelayedExpansion

for /F "delims= eol=" %%A IN ('dir /S /B /A-D "*%%A*"') do (
    set "fname=%%~nA"
    set "all=!fname:--=-random-!"

    rem The code below is for the first phone:
    for /F "tokens=2 delims=-" %%C IN ("!all!") do (
        md "%%B"
        move "%%~fA" "%%~dpA%%~nxB"
    )
)

如果要使用第二部电话,请用tokens=2替换tokens=3

答案 1 :(得分:0)

如果您有要搜索的数字的完整列表(似乎是这种情况),如果是这样,那么也许会有所帮助。它不会移动文件,而是会复制文件,因此,如果您要查找104,它将把它复制到文件夹104中,但是如果您按照列表中的第二个示例搜索这两个数字, ,分别为104109,它将文件复制到两个文件夹104109中,然后您可以在两个循环之后简单地执行一个del *.wav

@echo off
set "list=101 102 103 104 105 106 107 108"
for %%i in (%list%) do (
  for /F %%a in ('dir /b /a-d "*-%%i-*"') do (
      mkdir %%i
      copy "%%a" %%i
    )
)