bat文件将dir和subdir中的所有文件移动到基​​于许多扩展名的新文件夹

时间:2013-04-22 14:13:35

标签: batch-file cmd dos

我将此视为参考:batch file Copy files with certain extensions from multiple directories into one directory

我的[sub]文件夹中包含大约300k +文件,其中有许多文件类型需要根据文件扩展名移动到文件夹。我需要帮助形成cmd,根据扩展名将文件放在相应的文件夹中。

Simi-Pseudo代码:

for /R C:\Recovery %f.%EXT move %f C:\RecoverySorted\%EXT

上面的代码当然不能正常工作。需要帮助修改。

如果可能对非扩展文件进行错误检查也会很好。我注意到一些没有扩展名的文件。谢谢!

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL
FOR /f "delims=" %%i IN ('dir /s /b /a-d') DO (
 IF NOT "%%~xi"=="" MD "c:\destdir\%%~xi" 2>NUL
 ECHO MOVE "%%i" "c:\destdir\%%~xi"
)

如果您没有从所需的相对根开始,请在dir子句中包含源目录名称。更改destdir以适应。 2>nul会抑制make-directory上的错误消息,因为这会尝试多次创建目录.ext。将>nul添加到MOVE...行以取消移动报告。删除该行上的echo以实际执行移动,而不是报告要进行的移动。首先在一个小子树上进行测试。

答案 1 :(得分:2)

@Echo OFF

Set "Folder=C:\windows"
Set "DestDir=C:\MySortedFiles"

FOR /R "%Folder%" %%# in ("*") DO (
    If not exist "%DestDir%\%%~x#" (MKDIR "%DestDir%\%%~x#")
    Echo [+] Moving: "%%~nx#"
    Move "%%#" "%DestDir%\%%~x#\" 1>NUL
)

Pause&Exit

注意:键入 DestDir 路径时,请勿使用最后一个斜杠。