我有一个恶梦,试图从多个目录复制文件到一个单一的目录。
基本上我收到一个数据集与单个文件夹中的个人PNG文件。 我想要的是一个包含所有png文件的文件夹。
我想用代码来做这件事的原因是数据集大约是。 6000文件夹,因此手动进行是不现实的。 这可以用WinApi来完成,因为我不需要制作这个跨平台。 我只是想合并血腥的文件夹。
到目前为止,我已经设法获得所有保存到.txt文件中的png文件的path,这些文件保存在每一行中。
例:
C:/用户/ rudwi /文档/ Visual_Studio_2017 /项目/ ExtractPhotos / ExtractPhotos / LFW-deepfunneled / Abbas_Kiarostami / * PNG
只是想知道有一种方法,我可以从上面的path移动到另一个目录。
ANON给出的解决scheme我相信是Linux,但使用命令行中的xCopy几乎是相同的。 相反,只需在源path之前添加/ s即可将所有内容包含在目录中。 希望这有助于某人。
因为你已经有了源代码路径,只需要创建一个命令的.bat文件来做一个副本比较容易。
在你最喜欢的编辑器中执行以下操作
在你的所有行上加上'cp'。
将“目标路径”追加到所有行中。
将文件重命名为.bat并从cmd窗口运行。
作为一个例子,从上面的行改变
C:/Users/rudwi/Documents/Visual_Studio_2017/Projects/ExtractPhotos/ExtractPhotos/lfw-deepfunneled/Abbas_Kiarostami/*.png
至
cp C:/Users/rudwi/Documents/Visual_Studio_2017/Projects/ExtractPhotos/ExtractPhotos/lfw-deepfunneled/Abbas_Kiarostami/*.png C:/DestinationPath
cmd的脚本可能看起来像这样:
set DESTDIR= C:\DestinationPath\ for /f "delims=" %%i in (filelist.txt) do (xcopy "%%i" %DESTDIR% /i /y )
请注意,不要忘记在目的地结束时的反斜杠。 当然,脚本可以参数化:
set DESTDIR= %2 for /f "delims=" %%i in (%1) do (xcopy "%%i" %DESTDIR% /i /y )
把它放到一个mcopy.cmd文件中,可以这样使用它:
mcopy filelist.txt C:\ DestinationPath \
当我不得不做这样的事情,如果我需要快速完成一次,而不写任何脚本,我会这样做:
收集所有来自subdirs的png
文件: dir /s /b *.png > copy.bat
然后通过在顶部添加@echo off
修改你的copy.bat
,并在每个文件名前加上call:mycopy
,然后在copy.bat
的底部添加:
goto:eof :mycopy copy %1 C:\mynewdir exit /b 0
不是最好的方法,但是不用做任何脚本就可以快速完成。 然后当运行该copy.bat我会检查输出错误重复的文件名。