Как переместить все подпапки в основную папку для большого количества основных папок?

У меня 1800 основных папок, около 1000 из них имеют подпапки с тем же именем (всегда с тем же именем).

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

Итак, мне нужно переместить все эти подпапки в основную папку, есть идеи, как это сделать?

Например:

папка1 со всеми файлами

папка2 с подпапкой, также называемой папка2, в которой находятся все файлы

папка3 со всеми файлами

+1797

И т. д.

2 ответа

Непроверено, но этот PowerShell должен быть близок.

Предполагаю:

  • Файлы любой подпапки папки namin следует переместить в основную папку, а затем удалить подпапку.
  • Команда запускается из папки, содержащей основные папки (путь легко добавляется)

Подробный:

      Get-ChildItem -Directory | Where-Object { ( $SubFolder = Get-ChildItem $_.FullName -Directory ) } -PipelineVariable MainFolder | ForEach-Object{
    # Move files to MainFolder
    Get-ChildItem $SubFolder -File | Move-Item -Destination $MainFolder.FullName -WhatIf
    # Delete empty SubFolder
    Remove-Item $SubFolder -WhatIf
}

Псевдоним:

      gci -ad | ? { ( $SubFolder = gci $_.FullName -ad ) } -pv MainFolder | %{
    gci $SubFolder -af | move -Destination $MainFolder.FullName -WhatIf
    del $SubFolder -WhatIf
}

The -WhatIfПараметр позволяет протестировать команду без фактического перемещения/удаления. Удалите после тестирования для выполнения действий.

Вы можете создать пакетный скрипт, который сделает всю работу за вас. Вы копируете код ниже и помещаете его в блокнот. Сохраните файл с нужным именем, но с расширением *.bat. Затем вы перетаскиваете основную папку (а не основные подпапки) в командный файл.

Сначала протестируйте какую-нибудь копию, чтобы увидеть, соответствует ли результат ожидаемому...

      @echo off

IF /i exist "%~1" (set "MainFolder=%~1") else (exit)

pushd "%MainFolder%"
For /f "delims=" %%a in ('dir /ad /b 2^>nul') do Call :MSubfolders "%%~a"

exit

:MSubfolders
set "MSubfolder=%~1"
for /f "delims=" %%a in ('dir /ad /b /s "%MSubfolder%\*" ^|sort /r 2^> nul') do (
                                                                                 for /f "delims=" %%b in ('dir /b /a-d "%%a\*" 2^>nul') do IF /i not exist "%MSubfolder%\%%b" (move "%%a\%%b" "%MSubfolder%\") else (call :Rename "%%a" "%%b")
                                                                                 rd "%%a\"
                                                                                )
goto :EOF

:Rename
for /l %%a in (1,1,100) do (
                            if /i not exist "%MSubfolder%\%~n2(%%a)%~x2" move "%~1\%~2" "%MSubfolder%\%~n2(%%a)%~x2"
                            goto :EOF
                           )
goto :EOF

Другие вопросы по тегам