将所有文件从多个子文件夹移动到父文件夹

时间:2017-08-19 09:27:24

标签: windows batch-file

我在https://superuser.com/questions/999922/move-all-files-from-multiple-subfolders-into-the-parent-folder

找到了一个不错的剧本

主要问题是我需要一个适用于每个子文件夹的脚本,并将所有文件从Flacroot目录移动到上面的文件夹作为初始点。例如Album1 - >重新编码,重新编码的所有内容应移至Album1,并移至每个相册目录。

@echo off

FOR /R "C:\Source Folder" %%i IN (*.png) DO MOVE "%i" "C:\Staging Folder"

此脚本无法为每个子文件夹执行此操作。有人知道如何解决这个问题吗?

自:

|Flacroot
|    |Album1
|    |      |Re-Encode
|    |      |          |*.*
|Flacroot
|    |Album2
|    |      |Re-Encode
|    |      |          |*.*
|Flacroot
|    |Album3
|    |      |Re-Encode
|    |      |          |*.*

为:

|Flacroot
|    |Album1
|    |      |Re-Encode, *.*
|Flacroot
|    |Album2
|    |      |Re-Encode, *.*
|Flacroot
|    |Album3
|    |      |Re-Encode, *.*

原创和编辑结构:

D:.
│   cuerenamer.bat
│
└───!Onmyōza
    │
    ├───Onmyo-Za - Welter of Hundred Demons
    │   │   Front.jpg
    │   │
    │   ├───Re-Encode
    │   │       01. Song1.flac
    │   │       02. Song2.flac
    │   │
    │   └───Scans
    │           02.jpg
    │           03.jpg
    │
    │───Onmyo-Za - Ninja Magic Story of Voluptuous Flower 
    │   │   Front.jpg
    │   │
    │   ├───Re-Encode
    │   │       01. Song1.flac
    │   │       02. Song2.flac
    │   │
    │   └───Scans
    │           02.jpg
    │           03.jpg
    │           04.jpg

哦,重要的是Scans文件夹应该被排除在外,不应该被触及。我希望这个结构解释得那么好。

脚本应该在父文件夹!Onmyōza中运行,并按照描述移动文件。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用以下批处理代码很容易实现此任务:

@echo off
for /D %%I in ("%~dp0*") do (
    if exist "%%I\Re-Encode\*" (
        move /Y "%%I\Re-Encode\*" "%%I\" 2>nul
        rd "%%I\Re-Encode" 2>nul
    )
)

%~dp0引用批处理文件的驱动器和路径,该文件扩展为始终以反斜杠结尾的目录路径。

使用选项/D的命令 FOR 搜索与批处理文件目录中的模式*匹配的非隐藏目录。这意味着 FOR 处理目录Album1Album2Album3,其中批处理文件位于目录FlacrootOnmyo-Za - Welter of Hundred Demons和{{ 1}}批处理文件位于目录Onmyo-Za - Ninja Magic Story of Voluptuous Flower

IF 条件检查 FOR 子目录!Onmyōza找到的批处理文件目录的当前子目录中是否存在。

如果存在子目录Re-Encode,则此子目录中的所有文件都会在一个目录级别上移动到批处理文件目录中的当前子目录。

然后删除子目录Re-Encode,只有当它不再包含任何文件或其他子目录而且没有运行进程时才使用该目录作为当前目录。

由于要移动的文件而导致的错误消息已经存在于相册目录中并且是只读的,或者要在应用程序中打开要移动的文件导致共享访问冲突或子目录{{1}删除时不为空,...通过将它们从句柄 STDERR 重定向到设备 NUL 来抑制。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • Re-Encode ...解释Re-Encode
  • call /?
  • %~dp0
  • echo /?
  • for /?
  • if /?

另请阅读Microsoft有关Using Command Redirection Operators的文章,了解move /?

的说明