Copy-Item并重命名为Powershell中的特定父目录

时间:2017-08-16 14:59:49

标签: database powershell batch-file

我有一个脚本会复制我已经过滤并复制到名称加上LastWriteTime的新目录的目录列表

$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

而不是计数器,我更喜欢在其中一个父目录的末尾有一个名字。例如,如果$ folders是此列表:

 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 ###始终是第3个文件夹。

1 个答案:

答案 0 :(得分:0)

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

您可以使用spilled获取文件夹名称,并将其放在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 变量,也不需要进行增量操作。

确保正确地提供路径,以便它可以在每条路径上分割。这只是对路径进行硬编码的示例,因为您尚未指定它是在目标路径还是源路径中。

希望它有所帮助。