我想使用 cmd 或 powershell 将子文件夹从其所在的文件夹中移出。
应保留每个子文件夹的结构。文件夹的命名没有任何规则,许多文件夹都有非 ASCII 字母。
我想要更改的文件夹结构如下。
rootfolder rootfolder
|-folder |-subfolder
| |-subfolder |-subfolder
| |-subfolder |-subfolder
| |-subfolder ==> |-subfolder
|-folder |-subfolder
|-subfolder |-subfolder
|-subfolder
|-subfolder
我搜索了 stackexchange 网站,但找不到更安全或更合适的网站。
我发现一个以...开头的命令行命令for /r
最终移动了文件夹中每一层级的子文件夹。
我发现当源文件夹和目标文件夹都设置时,这个方法似乎很有用,但我需要在不同的文件夹中执行此操作。我不知道如何在命令中输入相对路径,例如./
或../
。
这个还引入了一个可以在文件夹名称具有模式时使用的命令。
还有这个创造性的解决方案移动文件夹中的所有嵌套文件夹,但我不知道它是否会保留嵌套文件夹的结构。另外,显然我无法在搜索结果中过滤位于根文件夹内的直接文件夹中的子文件夹。
答案1
使用 PowerShell:
$rootfolder = 'C:\Whatever'
$sourcefolders = Get-ChildItem $rootfolder -Directory
$sourcefolders |
Get-ChildItem -Directory |
Move-Item -Destination $rootfolder
$sourcefolders | remove-item
答案2
我的理解是,您只想移动第一级子文件夹,而您已经找到的解决方案也会遍历较低级别。
以下.bat
文件将执行该操作。将其存储在根文件夹中并从那里调用。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%G in ('dir /b /a:d "path\to\rootfolder"') do (
for /f "tokens=*" %%H in ('dir /b /a:d "%%G"') do move "%%G\%%H" "path\to\rootfolder"
)