如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到其父目录?
Posted
技术标签:
【中文标题】如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到其父目录?【英文标题】:How to move all files with specific extension from all subdirectories to their parent using CMD? 【发布时间】:2011-05-20 10:11:36 【问题描述】:文件夹c:\folder1
包含subfolder1
、subfolder2
等。
这些子目录包含.pdf
和.db
文件。
如何使用 Windows 命令解释器将所有 .pdf
文件移动到 c:\folder1
?
【问题讨论】:
您是否希望使用任何特定的编程语言来做到这一点? 对不起,我应该提到这一点。在 MS-DOS 中使用 CMD。 【参考方案1】:这对我有用:
在.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
开关。
希望对你有帮助。
【讨论】:
%x 就够了,%%x 用于批处理文件 我认为for /r "b:\" %x in (*.mp3) do copy "%x" "c:\temp\cdrw"
有效,但不知道它是否处理子文件夹。
有没有办法自动覆盖/保留所有重复的命名文件,而不是需要回复每个“是/否/全部”对话框
@Thunder_Ruler 回答 a
(表示“全部”)将覆盖所有,但我不知道不覆盖所有选项。【参考方案2】:
将所有文本文件复制到一个文件夹并保留目录结构:
xcopy *.txt /s D:文件夹
【讨论】:
【参考方案3】:在c:/folder1
位置打开CMD
运行以下命令:
mv ./subfolder1/*.pdf .
mv ./subfolder2/*.pdf .
./subfolder1/*.pdf
选择 ./subfolder1/
中的所有 (*) pdf 文件
和
mv 命令将它们全部移动到相对路径.
,即当前目录c:/folder1
您还可以输入完整或绝对路径来代替相对路径(如./subfolder1/
、./subfolder2/
和.
),如c:/folder1/subfolder1/
、c:/folder1/subfolder2/
和c:/folder1/
【讨论】:
【参考方案4】:外部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
并复制/粘贴其中一个结果以运行它并确认它按您预期的方式工作。然后消除回声并开始移动。
【讨论】:
如果子目录的名称中有空格,这将不起作用【参考方案5】:在 Windows 资源管理器中还有另一种方法(GUI,而不是命令提示符):
导航到***目录 在右上角的搜索框中,输入 *.pdf 并点击搜索 选择所有文件并将它们拖到***文件夹中 响应有关覆盖文件的任何提示【讨论】:
少量文件的好主意。我正在尝试使用 100,000 个文件,但这种方法确实会冻结。 这对大约 10 个目录中的几百个文件非常有效。我认为这在您有很多位置时特别有用,即使文件数量很少。【参考方案6】:@echo on
for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"
pause
将所有文件从newdrg
文件夹及其“子文件夹”移动到目标文件夹Alldrawings
,此命令用于命令行的批处理文件操作,在两个地方都使用单个“%”。
【讨论】:
【参考方案7】:我知道这是***的,但以防万一它对任何人都有帮助。
使用它在所有子文件夹中搜索 .MKV 文件并将它们移动到批处理文件所在的当前目录。
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.mkv) DO (
move "%%X" "%CD%"
)
popd
)
【讨论】:
【参考方案8】:Robocopy 为我创造了奇迹:
robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV
我用它把所有带有特定掩码的文件移出c:\cache
及其众多子目录。
【讨论】:
你说“移动所有文件”但你提到了copy
对吗?
/MOV
复制后删除源【参考方案9】:
我认为没有通配符可用于子文件夹,因此您想使用循环遍历每个子文件夹并移动 *.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)。命令提示符遇到通配符时不会递归操作。
【讨论】:
顺便说一句,这将遍历所有子文件夹,而不仅仅是第一个分支。 来自 WinXP 和 Win7 的提示:(发错帖,忽略) 你是对的,发帖人想要一个我误读的递归解决方案。 谢谢 Eaglebird,我尝试了您的解决方案,我得到“%%G 在这个时候是意外的”。我会上传一个屏幕截图,但我不知道该怎么做。 试图上传问题中的图片,但该控件似乎在 IE 7.0 中不起作用【参考方案10】:MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"
在移动命令之后,您将获得源文件夹,然后是文件将被移动到的目标。每个文件扩展名前面的 * 是一个通配符函数,它将选择该目录中存在的所有指定文件类型。
此外,如果您愿意,可以使用这些命令创建一个 .bat 文件。为此,请将您的命令粘贴到记事本中并将其保存为 .bat 而不是 .txt
然后,您可以双击该文件,每次执行此操作时它都会执行该文件中的命令。如果您有任何需要这样做的重复性任务,这将非常有用。
【讨论】:
【参考方案11】:这里只是在黑暗中冒险,但如果我没记错的话,DOS 可以处理 glob,mv
的等价物是 MOVE
,所以:
MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\
【讨论】:
我尝试了copy B:\*\*.* C:\temp\cdrw\
并得到了这个错误:The filename, directory name, or volume label syntax is incorrect.
以上是关于如何使用 CMD 将所有具有特定扩展名的文件从所有子目录移动到其父目录?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python中的目录中查找具有特定文件扩展名的所有文件