Powershell 复杂复制并创建包含父名称的目录
Powershell complex copy and create directories containing name of parent
我有一个复杂的文件夹结构要移动
我有一个包含 2000 个文件的文件夹,这些文件必须在新的文件结构中移动,我用 powershell 做了一些简单的任务,但没有那么复杂,所以我完全迷路了...没有找到其他问题的任何解决方案...
所有包含 23 个文件的文件夹(一些 .dds 一些 .xml 等等)文件夹必须完全移动
这里是实际情况:
files8891\
files8986\
files9362\
files...\
必须移至:
files8891\aaa\bbb\ccc\ddd\eee\real8891\
files8986\aaa\bbb\ccc\ddd\eee\real8986\
files9362\aaa\bbb\ccc\ddd\eee\real9362\
files...\aaa\bbb\ccc\ddd\eee\real...\
文件中有大约 2000 个文件夹必须与其文件一起移动
非常感谢您的帮助
您可以修改我的代码(不是更好的方法,但有效)
$foldernames=Get-ChildItem -Recurse "D:\testdir" | ?{ $_.PSIsContainer } #get all folder in start folder, for you must be "...files\"
foreach($foldername in $foldernames){
$files=Get-ChildItem -Path $foldername.FullName|Where-Object {! $_.PSIsContainer} #get all files in current folder, no recurse,no subfolders.
$files|Move-Item -Destination (New-Item -ItemType Directory -Path (Join-Path -path $foldername.FullName -ChildPath ("aaa\bbb\ccc\ddd\eee\real\"+$foldername.Name)) -Force)
#move all files and create directories
}
补充:
如果您在文件夹中有子文件夹,您必须像那样修复代码
$foldernames=Get-ChildItem "D:\testdir" | ?{ $_.PSIsContainer }
foreach($foldername in $foldernames){
$files=Get-ChildItem -Path $foldername.FullName
$files|Move-Item -Destination (New-Item -ItemType Directory -Path (Join-Path -path $foldername.FullName -ChildPath ("aaa\bbb\ccc\ddd\eee\real\"+$foldername.Name)) -Force)
}
它从文件夹 128891(一个例子)中移动所有内容,包括子文件夹
如果您在文件夹中有子文件夹,但您只想从中移动文件,则必须像这样进行文件传输:
$files=Get-ChildItem -Path $foldername.FullName -recurse|Where-Object {! $_.PSIsContainer}
但请记住,在这种情况下,可能会因文件名重复而出现错误
我有一个复杂的文件夹结构要移动
我有一个包含 2000 个文件的文件夹,这些文件必须在新的文件结构中移动,我用 powershell 做了一些简单的任务,但没有那么复杂,所以我完全迷路了...没有找到其他问题的任何解决方案...
所有包含 23 个文件的文件夹(一些 .dds 一些 .xml 等等)文件夹必须完全移动
这里是实际情况:
files8891\
files8986\
files9362\
files...\
必须移至:
files8891\aaa\bbb\ccc\ddd\eee\real8891\
files8986\aaa\bbb\ccc\ddd\eee\real8986\
files9362\aaa\bbb\ccc\ddd\eee\real9362\
files...\aaa\bbb\ccc\ddd\eee\real...\
文件中有大约 2000 个文件夹必须与其文件一起移动
非常感谢您的帮助
您可以修改我的代码(不是更好的方法,但有效)
$foldernames=Get-ChildItem -Recurse "D:\testdir" | ?{ $_.PSIsContainer } #get all folder in start folder, for you must be "...files\"
foreach($foldername in $foldernames){
$files=Get-ChildItem -Path $foldername.FullName|Where-Object {! $_.PSIsContainer} #get all files in current folder, no recurse,no subfolders.
$files|Move-Item -Destination (New-Item -ItemType Directory -Path (Join-Path -path $foldername.FullName -ChildPath ("aaa\bbb\ccc\ddd\eee\real\"+$foldername.Name)) -Force)
#move all files and create directories
}
补充:
如果您在文件夹中有子文件夹,您必须像那样修复代码
$foldernames=Get-ChildItem "D:\testdir" | ?{ $_.PSIsContainer }
foreach($foldername in $foldernames){
$files=Get-ChildItem -Path $foldername.FullName
$files|Move-Item -Destination (New-Item -ItemType Directory -Path (Join-Path -path $foldername.FullName -ChildPath ("aaa\bbb\ccc\ddd\eee\real\"+$foldername.Name)) -Force)
}
它从文件夹 128891(一个例子)中移动所有内容,包括子文件夹
如果您在文件夹中有子文件夹,但您只想从中移动文件,则必须像这样进行文件传输:
$files=Get-ChildItem -Path $foldername.FullName -recurse|Where-Object {! $_.PSIsContainer}
但请记住,在这种情况下,可能会因文件名重复而出现错误