我有 1800 个主文件夹,其中大约 1000 个文件夹包含同名(始终是同名)的子文件夹。
这些子文件夹中的文件没有被我使用的程序拾取,因为它们不在主文件夹中。我尝试过更改程序的目录,但可惜无济于事。
所以我需要将所有这些子文件夹移动到主文件夹中,你知道该怎么做吗?
例如:
包含所有文件的文件夹1
folder2 及其子文件夹也名为 folder2,其中包含所有文件
包含所有文件的文件夹3
+1797
ETC。
答案1
您可以创建一个批处理脚本来为您完成这项工作。复制下面的代码,将其放入记事本中。使用您想要的名称保存文件,但使用 *.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
答案2
未经测试,但是这个电源外壳应该很接近。
任务:
- 应将 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
}
该-WhatIf
参数允许您测试命令而无需实际移动/删除。测试后删除以执行操作。