【问题标题】:Moving files to a different directory将文件移动到其他目录
【发布时间】:2017-10-09 17:08:48
【问题描述】:

我正在做噩梦,试图将文件从多个目录复制到一个目录中。

基本上,我收到了一个数据集,其中包含各个文件夹中的各个 png 文件。我想要的是包含所有 png 文件的 一个 文件夹。

我想用代码做这个的原因是数据集有大约。 6000个文件夹,所以手动做是不切实际的。这可以通过 WinApi 完成,因为我不需要跨平台。我只想合并血腥文件夹。

到目前为止,我已经设法将 png 文件的路径全部保存到 .txt 中,并保存在每一行中。

例子:

C:/Users/rudwi/Documents/Visual_Studio_2017/Projects/ExtractPhotos/ExtractPhotos/lfw-deepfunneled/Abbas_Kiarostami/*.png

只是想知道有没有办法可以从上面的路径移动到不同的目录。

我相信 ANON 给出的解决方案适用于 linux,但在命令行中使用 xCopy 几乎相同。相反,只需在源路径前添加 /s 即可包含目录中的所有内容。希望这可以帮助某人。

【问题讨论】:

  • 我有一个用 C# 编写的解决方案,它是一个递归函数(复制并粘贴整个目录以及目录中的所有子文件夹),它需要一个源路径和一个目标路径。您应该能够将其转换为 C++。等一下
  • 不,我需要删除子文件夹,感谢凯尔
  • 如果是 c++,你可以使用 SetCurrentDirectory() 来设置你想要的目录。循环遍历所有文件名(带路径名),加载图像并将它们保存在当前目录中..天真..但它应该可以工作
  • 如果你想删除一个文件夹/子文件夹..关注这个stackoverflow.com/questions/734717/how-to-delete-a-folder-in-c

标签: c++ windows batch-file


【解决方案1】:

由于您已经拥有源路径,因此只需创建命令的 .bat 文件来进行复制会更容易。

在您喜欢的编辑器中执行以下操作:

  1. 在所有行前添加 'cp'。

  2. 将“目标路径”附加到所有行。

  3. 将文件重命名为 .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

【讨论】:

  • 你好,你能弹出一个例子,是不是像“cpC:/Users/rudwi/Documents/Visual_Studio_2017/Projects/ExtractPhotos/ExtractPhotos/lfw-deepfunneled/Abbas_Kiarostami/*.png C:/”
  • 可以使用循环从文件中读取.. 可重用脚本:P
  • @Swift 你可以做任何你想做的事,但我认为上面是一次性的,编写 .bat 文件很痛苦!
  • @Anon Mail,如果他得到这样的 6000 行文本文件,替换可能不起作用.. 脚本大小有限制。另外,.cmd,忘记 .bat <.>
  • cp 是 linux im on windows here
【解决方案2】:

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\

【讨论】:

    【解决方案3】:

    当我不得不做类似的事情并且如果我需要它快速完成一次而不编写任何脚本时,我会这样做:

    从子目录中收集所有png 文件: dir /s /b *.png &gt; copy.bat

    然后修改您的copy.bat,在顶部添加@echo off,并在每个文件名前加上call:mycopy,然后在copy.bat 的底部添加:

    goto:eof
    :mycopy
    copy %1 C:\mynewdir
    exit /b 0
    

    不是最好的方法,但无需真正编写任何脚本即可快速完成。然后在运行该 copy.bat 时,我会检查输出中是否存在重复文件名的错误。

    【讨论】:

    • 是的,使用 .bat 中的 xCopy 越界了,但成功了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多