Как перенести файлы из подпапок в папки на два уровня выше, сохраняя файлы в основной папке и удаляя подпапки? - PullRequest
0 голосов
/ 07 мая 2019

Мне нужен командный файл для перемещения файлов из этого:

F:\123456\V000\Chaptered\File1
F:\123456\V000\Chaptered\File2
F:\123457\V000\Chaptered\File1
F:\123457\V000\Chaptered\File2

в это

F:\123456\File1
F:\123456\File2
F:\123457\File1
F:\123457\File2

при удалении папок V000 и Chaptered, но без удаления каких-либофайлы.

Я пытался создать командный файл несколькими различными способами, но не могу заставить его работать.

@echo off & setlocal enabledelayedexpansion
for /d /r %~"dp0" %%a in (*) do (
    if /i "%%~nxa"=="FolderX" (
       set "folderpath=%%a"
       move /y "!folderpath!\*" "!folderpath!\.."
       rmdir "!folderpath!"
   )
)

Я надеюсь получить структуру файла выше, но не смогли ничего изменить.(Я стараюсь быть осторожным с тем, что я удаляю, так как файлы важны.)

Ответы [ 2 ]

1 голос
/ 07 мая 2019
@echo off
setlocal
for /d /r "%~dp0" %%a in (*) do (
    if /i "%%~nxa"=="FolderX" (
       ECHO move /y "%%a\*" "%%a\..\.."
       ECHO rmdir "%%a"
   )
)

(не проверено)

Теория - %%a будет назначено имя каждого подкаталога по очереди.Для обработки будут выбраны только листья с именем FolderX;содержимое этого каталога будет перемещено к его прародителю.

Об обязательных командах должно сообщать echo s - защитное устройство, гарантирующее отсутствие повреждений во время тестирования, пока отладка не будет завершена.

Проблема в том, что если целевой каталог содержит подкаталоги, то эти подкаталоги также будут удалены.

0 голосов
/ 07 мая 2019

Что ж, если ваши целевые файлы всегда находятся на одном уровне иерархии каталогов, я предлагаю не искать файлы во всем дереве каталогов, а только на этом уровне, например:

@echo off
rem // Enumerate the variating destination directories and check sub-directory tree for existence:
for /D %%I in ("F:\*") do if exist "%%~I\V000\Chaptered\" (
    rem // Move found files to the destination directories:
    move /Y "%%~I\V000\Chaptered\*.*" "%%~I\"
    rem // Remove the sub-directory tree:
    rmdir "%%~I\V000\Chaptered" "%%~I\V000"
)
...