文件夹c:\folder1
包含subfolder1
,subfolder2
等。
这些子目录包含.pdf
和.db
文件。
如何使用Windows命令解释器将所有.pdf
文件移动到c:\folder1
中?
文件夹c:\folder1
包含subfolder1
,subfolder2
等。
这些子目录包含.pdf
和.db
文件。
如何使用Windows命令解释器将所有.pdf
文件移动到c:\folder1
中?
这对我起作用:
.bat
/ .cmd
文件中:for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"
for /r "c:\source_directory\" %x in (*.pdf) do move "%x" "c:\target_directory\"
这个命令将递归复制源目录(包括其所有子目录)中的所有*.pdf
文件到目标目录。
如果要排除子目录中的文件,请省略/r
开关。
希望对您有所帮助。
for /r "b:\" %x in (*.mp3) do copy "%x" "c:\temp\cdrw"
可以工作,但不确定它是否处理子文件夹。 - Ryana
(代表“全部”),将会覆盖所有内容,但我不知道如何选择不覆盖所有内容的选项。 - Dai外层的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文件:
FOR /R [您的根文件夹路径] %%G IN (*.pdf) DO move %%G [新路径]
DO后面的命令本身就带有引号。如果您预期源目录或目标目录中会有空格,请使用双引号将它们封装起来,例如:
FOR /R "源目录路径带有空格" %%G IN (*.pdf) DO move "%%G" "目标目录路径带有空格"
请注意,在%%G周围加上引号是必需的,以使move命令能够解析路径。
**编辑:针对被接受的答案所做的回应,以下分别是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"
我只是猜测一下,但如果我没记错的话,DOS可以处理通配符,相当于mv
的命令是MOVE
,所以:
MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\
copy B:\*\*.* C:\temp\cdrw\
命令,但是出现了以下错误:文件名、目录名或卷标语法不正确。
- Ryan@echo on
for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"
pause
{将newdrg
文件夹及其“子文件夹”中的所有文件移动到目标文件夹Alldrawings
,此命令适用于批处理文件操作,对于命令行使用,在两个位置上都使用单个“%”符号}。
xcopy *.txt /s D:Folder