[英]Powershell ISE - How do I copy many files and rename them at the same time?
[英]How do I copy a list of files and rename them in a PowerShell Loop
我們正在將一長串文件從它們的不同目錄復制到一個位置(同一服務器)。 到達那里后,我需要重命名它們。
我能夠移動文件,直到發現要移動(和重命名)的文件名列表中存在重復項。 它不允許我將文件多次復制到同一目標位置。
以下是移動后的文件名列表:
"10.csv",
"11.csv",
"12.csv",
"13.csv",
"14.csv",
"15.csv",
"16.csv",
"17.csv",
"18.csv",
"19.csv",
"20.csv",
"Invoices_Export(16) - Copy.csv" (this one's name should be "Zebra.csv")
我寫了幾個foreach
循環,但是不能正常工作。
該腳本可以很好地移動文件。 是重命名無法按我想要的方式工作。 第一個文件未重命名; 其他文件重命名。 但是,它們也將移動的文件保留在原位。
此腳本需要具有3列的csv:
c:\\temp\\smefile.txt
) c:\\temp\\smefile.txt
) # Variables
$Path = (import-csv C:\temp\Test-CSV.csv).Path
$Dest = (import-csv C:\temp\Test-CSV.csv).Destination
$NN = (import-csv C:\temp\Test-CSV.csv).NewName
#Script
foreach ($D in $Dest) {
$i -eq 0
Foreach ($P in $Path) {
Copy-Item $P -destination C:\Temp\TestDestination -force
}
rename-item -path "$D" -newname $NN[$i] -force
$i += 1
}
本身沒有錯誤,只是沒有我期望的結果。
歡迎使用Stack Overflow!
有幾種方法可以解決重復名稱的情況:
Test-Path
檢查文件是否已在目標中。 如果是這樣,請啟動一個while
循環,在該名稱的末尾附加一個數字,然后檢查該數字是否存在。 使用Test-Path
每次檢查后增加您追加的數字。 不斷循環,直到Test-Path
回來$false
,然后break
了循環。 我將使用上述方法2顯示腳本的重構版本:
$csv = Import-Csv 'C:\temp\Test-CSV.csv'
foreach ($row in $csv)
{
$fullDestinationPath = Join-Path -Path $row.Destination -ChildPath $row.NewName
if (Test-Path $fullDestinationPath)
{
Write-Error ("The path '$fullDestinationPath' already exists. " +
"Skipping row for $($row.Path).")
continue
}
# You may also want to check if $row.Path exists before attempting to copy it
Copy-Item -Path $row.Path -Destination $fullDestinationPath
}
現在您的問題已得到回答,下面是一些改進代碼的想法:
ForEach
或foreach
, Rename-Item
或rename-item
等)。 我建議使用PascalCase,因為PowerShell cmdlet都在PascalCase中。 $i -eq 0
不是賦值語句,它是一個布爾表達式。 當您運行$i -eq 0
,PowerShell將返回$true
或$false
因為您詢問的是$i
存儲的值是否為0
。 要將值0
分配給$i
,您需要這樣編寫: $i = 0
。 $i += 1
沒什么問題,但是如果您願意,可以將其縮短為$i++
。 :
?” 這就是所謂的防御性編程,它將為您節省許多麻煩。 與生活中的任何事情一樣,請注意不要過分。 僅檢查可能的情況; 罕見的邊緣情況只會引起錯誤。 Start-Transcript
和Stop-Transcript
的出色cmdlet。 這些cmdlet記錄發送到PowerShell控制台窗口的所有輸出,以及一些系統信息,例如計算機上安裝的PowerShell版本。 非常便利!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.