Как переместить все подпапки в основную папку для большого количества основных папок?
У меня 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