大家好,聰明的人!我有點不知所措,我想我會問一個問題,看看是否有更高智商的人至少可以為我指明正確的方向。
我與許多單個 lvl 子檔案夾共享,所有子檔案夾的名稱都相似,格式為 (xxxxxx_x) 每個檔案夾內部都有幾個檔案:
- half 將以與父檔案夾相同的前綴“xxxxxx_x”開頭
- 另一半有另一個 10 位數字前綴,后跟父檔案夾前綴:“yyyyyyyyyy-xxxxxx_x”
我被要求將檔案移動到一個新位置,在該位置我已經撰寫了相同檔案夾結構的部署腳本,但當然新的要求是根據上述兩個命名約定拆分檔案。
TL;DR:總而言之,如何根據檔案名的一部分將一批檔案從多個子檔案夾移動到其他位置?(字首)
典型例子:c:\share\123456_2\123456_2-filename.xls 應該去 d:\share\123456_2 而 c:\share\123456_2\1234567890-123456_2-filename.xls 應該去 E:\share\123456_2
我可以使用下面的方法移動檔案并創建檔案夾(如果丟失),但我如何只定位以相同字串(0,8)開頭的檔案?
dir | %{
$id = $_.Name.SubString(0,8);
if(-not (Test-Path $id)) {mkdir $id};
mv $_ "D:\share\$_";}
uj5u.com熱心網友回復:
好吧,一種方法是使用-Split運算子或方法來獲取損壞字串的第一部分并檢查它是否包含下劃線字符 ( _);因為這似乎遵循命名方案。
Get-ChildItem |
ForEach-Object -Process {
$destination = $_.Name.Split('-')[0]
if ($destination -match "_") {
Move-Item -LiteralPath $_.FullName -Destination "D:\share\$destination" -WhatIf
}
}
鑒于您不希望移動其他檔案,這只會移動具有相同開頭的檔案。
-WhatIf一旦你決定結果就是你所追求的,就洗掉安全通用引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/497980.html
