在Windows中使用通配符移动文件

时间:2014-12-13 05:22:35

标签: windows cmd wildcard

在Windows cmd中,我试图将一些.avi文件从子目录移动到父目录。例如,我有一个包含5个子目录的父目录。每个子目录中都有一个.avi文件。让我们说父目录的完整路径是C:\ Grand \ Parent。

    • Child1
    • CHILD2
    • Child3
    • Child4
    • Child5

以C:\ Grand作为我的工作目录,我尝试了这个,但它没有工作:

move "Parent\*\*.avi" "Parent"

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN (
  'dir /b /ad "%sourcedir%"'
  ) DO (
 ECHO(MOVE "%sourcedir%\%%a\*.avi" "%sourcedir%\"
)

echo============
FOR /f "delims=" %%a IN (
  'dir /s /b /a-d "%sourcedir%\*.avi" '
  ) DO (
 IF /i "%%~dpa" neq "%sourcedir%\" ECHO(MOVE "%%~fa" "%sourcedir%\"
)
echo============
FOR /f "delims=" %%a IN ('dir /s /b /a-d "%sourcedir%\*.avi"') DO (
 MOVE "%%~fa" "%sourcedir%\" 2>NUL >nul
)
GOTO :EOF

这里有三种不同的方法 - 警告第三种实际执行move

第一个严格地将源下面的一个级别移动到目标。

第二个做同样的事情,但是所有级别都是"变平"树。

第三种方法使用脏方法 - 在指示cmd移动文件时禁止错误。

答案 1 :(得分:0)

在命令行中使用以下选项之一:

如果"*.avi"中已经存在名为"C:\Grand\Parent"的文件,则此人可能会抱怨:

for /f "usebackq delims=" %f in (`dir /s /b /a-d "C:\Grand\Parent\*.avi"`) do move "%~f" "C:\Grand\Parent"  

此人不处理"C:\Grand\Parent"中已经存在的文件:

for /f "usebackq delims=" %f in (`dir /b /ad "C:\Grand\Parent\*"`) do move "%~f\*.avi" "C:\Grand\Parent"