繁体   English   中英

如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到其父目录?

[英]How to move all files with specific extension from all subdirectories to their parent using CMD?

文件夹c:\\folder1包含subfolder1subfolder2等。

这些子目录包含.pdf.db文件。

如何使用 Windows 命令解释器将所有.pdf文件移动到c:\\folder1

这对我有用:

.bat / .cmd文件中:

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"

要直接输入命令提示符窗口(不是 PowerShell):

for /r "c:\source_directory\" %x in (*.pdf) do move "%x" "c:\target_directory\"

此命令将递归地将所有*.pdf文件从源(及其所有子目录)复制到目标目录。

要排除子目录中的文件,请省略/r开关。

希望能帮助到你。

外部 for 循环列出工作目录中的子目录,内部 for 循环列出要移动到目标路径的子目录:

for /d %f in (*.*) do for /d %e in (%f\*.*) do move "%e" DestinationPath

如果DestinationPath不是工作目录的子文件夹,则此方法效果最佳,因为它会尝试将DestinationPath移动到自身中。

要在批量运行之前确认命令,请开始只回显最后的移动命令,如下所示:

for /d %f in (*.*) do for /d %e in (%f\*.*) do echo move "%e" DestinationPath

并复制/粘贴其中一个结果以运行它并确认它按您预期的方式工作。 然后去除回声并开始移动。

在 Windows 资源管理器(GUI,而不是命令提示符)中还有另一种方法可以做到这一点:

  • 导航到顶级目录
  • 在右上角的搜索框中,输入 *.pdf 并点击搜索
  • 选择所有文件并将它们拖到顶级文件夹
  • 响应有关覆盖文件的任何提示

我认为没有通配符适用于子文件夹,因此您想使用循环遍历每个子文件夹并移动 *.pdf;

FOR /R [your root folder path] %%G IN (*.pdf) DO move %%G [new path]

DO 之后的命令本身就在它自己的引号中。 如果您预计源或目标中会有空格,请使用双引号将它们封装起来,例如:

FOR /R "source folder with spaces" %%G IN (*.pdf) DO move "%%G" "dest path with spaces"

注意 %%G 周围的引号,这些是移动命令解析路径所必需的。

**编辑:响应接受的答案,分别来自 Windows XP 和 Windows 7 上的命令提示:

命令提示

这表明通配符在路径中不起作用,仅适用于单个目录中的文件(例如 C:\\folder*.files)。 命令提示符在遇到通配符时不会递归运行。

我知道这是最高级的,但以防万一它对任何人都有帮助。

使用它来搜索 .MKV 文件的所有子文件夹,并将它们移动到批处理文件所在的当前目录。

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.mkv) DO (
            move "%%X" "%CD%"
        )
    popd
)

Robocopy 为我创造了奇迹:

 robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV

我用它来将所有带有特定掩码的文件移出c:\\cache及其众多子目录。

MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

在移动命令之后,您有源文件夹,然后是文件将移动到的目标。 每个文件扩展名前面的 * 是一个通配符函数,它将选择该目录中存在的所有指定文件类型。

此外,如果您愿意,可以使用这些命令创建 .bat 文件。 为此,请将您的命令粘贴到记事本中并将其另存为.bat而不是.txt

然后,您可以双击该文件,每次执行该文件时它都会执行该文件中的命令。 如果您有任何需要这样做的重复性任务,这将非常有用。

只是在这里在黑暗中疯狂刺伤,但如果我没记错的话,DOS 可以处理 globs 并且mv的等价物是MOVE ,所以:

MOVE C:\\FOLDER1\\*\\*.PDF C:\\FOLDER1\\

@echo on

for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"

pause

{将所有文件从newdrg文件夹及其“子文件夹”移动到目标文件夹Alldrawings ,此命令用于批处理文件操作,命令行在两个地方都使用单个“%”}。

要将所有文本文件复制到文件夹并保留目录结构:

xcopy *.txt /s D:文件夹

在位置c:/folder1打开 CMD

运行以下命令:

mv ./subfolder1/*.pdf .
mv ./subfolder2/*.pdf .

./subfolder1/*.pdf选择所有(*)的PDF文件./subfolder1/

mv 命令将它们全部移动到相对路径. , 即当前目录c:/folder1

代替相对路径(如./subfolder1/./subfolder2/ & . ),您还可以输入完整或绝对路径,如c:/folder1/subfolder1/c:/folder1/subfolder2/ & c:/folder1/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM