32

次のコマンドを使用して、CSVファイルに基づいてネットワーク共有からローカルハードドライブにファイルをコピーしています。

import-csv C:\TEST\test.csv | foreach {copy-item -path $_.npath -destination 'C:\TEST\'}

次のステップは、別のCSVファイルを使用して、現在のファイル名に基づいてこれらのファイルの名前を変更することです。

コピーしてアイテムを作成し、名前を変更することもできるコマンドはありますか?

4

2 に答える 2

37

oldfilepathとnewfilenameの2つの列を含むCSVがある場合は、次を使用できます。

Import-Csv C:\test.csv | % { Copy-Item -Path $_.oldfilepath -Destination "C:\TEST\$($_.newfilename)" }

$_.newfilenameが。内にカプセル化されていることに注目してください$()。これ$_.newfilenameは、が式であり(変数からプロパティを取得しているため)、変数ではないためです。$()文字列で使用する前に式を解決するようにPowerShellに指示します。これを使用しない場合は、そのrow($_)のcsvオブジェクト全体が文字列として使用され、エラーが返されます。

于 2013-01-21T07:20:55.043 に答える
26

元のCSVにも新しい名前が含まれている場合は、それを使用して、コピーパスの末尾にファイル名を指定できます。copy-item CMDletを使用すると、宛先ファイル名を指定できます

Copy-Item C:\TEST\file1.jpg C:\TEST\file2.jpg

file1.jpgをコピーし、名前をfile2.jpgに変更します

変数をパス文字列の末尾に連結するには、次のように二重引用符を使用します。

Copy-Item C:\Path\To\File\file.ext "C:\Path\To\New\File\$newfilename"

-pathと-destinationは位置によって暗示されるため、実際には必要ないことに注意してください。

于 2013-01-21T03:22:05.527 に答える