这是我在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
答案 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"
)
)
但是,如果文件同时包含101
和102
,并且您想将其移动到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
中,但是如果您按照列表中的第二个示例搜索这两个数字, ,分别为104
和109
,它将文件复制到两个文件夹104
和109
中,然后您可以在两个循环之后简单地执行一个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
)
)