![将文件复制到单个目录中](https://linux22.com/image/1211786/%E5%B0%86%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8D%95%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%AD.png)
我想在 Windows 机器上使用 xcopy 将所有带有 .png 扩展名的文件拉到一个目录中。
我试过了xcopy C:\folder\*.png /s C:\png\
,但它保留了 \folder 中的子目录(例如在 C:\png 中,有 C:\png\a\b\c\img.png),而我不想要。我只想将所有 .png 放在 C:\png 中,而不保留 C:\folder 中的目录结构。
答案1
这可以用老办法来实现for
:
for /r C:\Folder %f in (*.png) do @copy "%f" C:\png
没有什么花哨。
答案2
如果你安装了 cygwin,这将是 find 的工作:
cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/
(虽然如果任何文件名中有空格就会出现问题 -find
但你会发现一些可以在所有情况下工作的命令变体)
如果您运行的是 Vista、2003 或 2008,那么不太灵活但仍然有用的“forfiles”就是您的好帮手。例如:
FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"
注意:我没有测试过上述任何一个命令,但理论上它们应该可以工作......
答案3
下面的批处理文件是我最终使用的,因为它具有更多的灵活性。
它建立在公认的解决方案之上。
echo off
REM Copying all files with specified pattern recursively from source-directory and sub-folders into destination folder
REM Variables
REM SRCFOLDER: Specifiy source directory. Search is recursivly done within that location.
REM SRCPATTERN: Search patter of one or multiple files, separated by space (Used in "for in ()" type loop
REM DSTFOLDER: Specifiy destination directory. All files get copied into it.
REM XCOPYOPTONS: Specify some copy options. /d only copies "newer" files, /y suppresses overwrite prompts
setlocal
set DSTFOLDER=C:\temp\found\
set SRCFOLDER=C:\temp\test\
set SRCPATTERN=*.txt *.asc
set XCOPYOPTIONS=/d /y
for /R %SRCFOLDER% %%f in (%SRCPATTERN%) do xcopy "%%f" %DSTFOLDER% %XCOPYOPTIONS%
答案4
Joey 的上述方法对我有用,但我确实需要对它进行一些实验,所以这个答案/回复只是为了向那些不熟悉/害怕使用命令的人澄清/解释,并帮助避免/解释我在使用它时遇到的问题,所以希望你不会:);
(就我而言,我需要将一位艺术家的音乐曲目文件合并到一个目录中,因为我的播放器简单列表都被 Windows Media 文件的特殊行为搞乱了!当我不想删除艺术家/专辑时! 眼睛转动)
无论如何,从他的开始;
“对于/r C:\Folder %f 在 (*.png) 中执行@copy“%f”C:\png”
“C:\folder” 位,... ... 是您指定要搜索哪些文件夹以查找文件的地方,然后只留下文件,而不是目录,FROM...
和
“C:\png” 位,...是您想要的没有目录的文件的位置,..to-GO。
前任 ;
...\KarlK\ (这是我在 cmd 中的位置 - 提示符所在的位置)
对我来说有用的是,当我想将所有子目录的曲目添加到一个文件夹中时,在这个文件夹之前的一个名为“allinONE”的目录中......是;(顺便说一下,.aiff 文件是音乐文件,所以你知道你在看什么)
FOR /r . %f IN (*.aiff) do @copy "%f" ..\allinONE
请注意,由于它无法完成“循环”搜索,您需要将目的地放在其他地方,而不是在正在搜索或将要搜索的子目录中,您可能会说,..然后它才允许搜索/复制 - 这就是为什么我将目的地放在' ..\ '目录中,“更高”或“之前” - 进一步“返回”到 c:根目录。
(换句话说,如果你在搜索之后找到它,它就会变得循环)
如果您这样做,并且有光标/cmd 提示...在您想要搜索的目录中...所以说您的音乐文件都松散地位于起始目录和子目录中,..那么这是没问题的。
如果您同意在当前目录以外的其他地方搜索目标目录,那么您应该有一个完整的(全长)位置,而不是像我一样的“。” - 再次,如果您不熟悉 DOS 中的技巧,那么是的,这确实有效,但如果您更喜欢两个全长位置,那么这样做也没什么错 :)
如果您只想使用 subdir.s 中的,而不是当前目录中的,那么这将不起作用 - 首先应该将起始目录中的内容临时移动到其他地方,但我相信有人知道如何添加一些额外的标志或运算符或东西,可以改进这个答案:)如果您乐意以可靠完整的方式在两个位置输入,那么请忽略最后一点。
如果你想知道,不要为目标指定文件类型 - 只需指定一个目录(要复制的位置) - 你可能会说过滤......发生在我得到(* .aiff)的地方
祝你好运!