2017-08-16 37 views
1

我有一个脚本,将复制,我已经过滤,并复制到一个新的目录与名称加上LastWriteTime拷贝项目和重命名为一个特定的父目录在PowerShell中

$srcdir = "Z:\Production500\000600" 
$destdir = "X:\Standards\Water Resources\GIS\_Water Resources GIS Database\_Unprocessed_Raw_data" 
$folders = Get-ChildItem -Recurse "Z:\Production500\000600" -Filter "Water Resources","GIS" -Recurse 
$i=1 
$folders | % ($_) {cp $_.FullName -Destination "$destdir\$($_.Name + $_.LastWriteTime.toString("_yyyy_MM_dd_") + $i)" -recurse; $i++} 
目录列表

脚本的伟大工程,复制,我需要到以下格式的确切文件夹和文件:

.\GIS_2017_07_09_1 
.\GIS_2017_07_10_2 
.\GIS_2017_07_10_3 

取而代之的是柜台的,我更愿意对从父目录的一个结尾的名称。例如,如果$文件夹是这个名单:

Directory: Z:\Production500\000600\B000676\Design\004\Chisholm Park\Water Resources 
Directory: Z:\Production500\000600\B000667\Design\001\Water Resources 
Directory: Z:\Production500\000600\B000663\Design\001\Water Resources 

我想改名为这个复制的项目:

.\GIS_2017_07_09_B000676 
.\GIS_2017_07_10_B000667 
.\GIS_2017_07_10_B000663 

从而省去了柜台上的需求,也使目标更有条理。值得注意的是,B000 ###总是第三个文件夹很深。

+0

你不需要两次get-childitem。您可以使用逗号分隔值。使用像这样'Get-ChildItem“Z:\ Production500 \ 000600”-Filter“Water Resources”,“GIS”-Recurse ' –

+0

您确定要仅选择第三级文件夹名吗? –

+0

是的,它总是第三。 @ Ranadip - 杜塔。并感谢您的过滤器开关提示! –

回答

0

让我们假设你的路径是在一个变量中提到因为你已经提到,它永远是第三级文件夹,你可以用这个进行:

您可以使用溢出来获取文件夹名称,可以把它的foreach

$path="Z:\Production500\000600\B000676\Design\004\Chisholm Park\Water Resources" 

$srcdir = "Z:\Production500\000600" 
$destdir = "X:\Standards\Water Resources\GIS\_Water Resources GIS Database\_Unprocessed_Raw_data" 
$folders = Get-ChildItem "Z:\Production500\000600" -Filter "Water Resources","GIS" -Recurse 
$folders | % ($_) {cp $_.FullName -Destination "$destdir\$($_.Name + $_.LastWriteTime.toString("_yyyy_MM_dd_") + "$($path.split('\')[3])")" -recurse} 

内您不需要$ I变量,不需要做增量操作。

确保您正确地给出路径,以便它可以在每个路径上拆分。这只是对路径进行硬编码的示例,因为您尚未指定它是否位于目标路径或源路径中。

希望它有帮助。

+1

谢谢! Ranadip –

+0

没有问题@KevinG。享受编码 –