Есть ли одна команда PowerShell для копирования и переименования файлов? - программирование
Подтвердить что ты не робот

Есть ли одна команда PowerShell для копирования и переименования файлов?

Я использую следующую команду для копирования файлов из общего сетевого ресурса на локальный жесткий диск на основе CSV файла.

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

Следующим шагом будет использование другого CSV файла для переименования этих файлов на основе их текущего имени файла.

Есть ли команда, которая позволит мне скопировать и элемент и переименовать его?

4b9b3361

Ответ 1

Если у вас есть CSV, содержащий два столбца, oldfilepath и newfilename, вы можете использовать следующее.

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

Обратите внимание, что $_.newfilename заключен в $(). Это потому, что $_.newfilename является выражением (поскольку мы получаем свойство из переменной), а не переменную. $() сообщает PowerShell разрешить выражение перед его использованием в строке. Если мы не будем использовать его, он использовал бы весь csv-объект для этой строки ($_) в качестве строки и возвратил ошибку.

Ответ 2

Если в вашем исходном CSV также было новое имя, вы можете использовать его для указания имени файла в конце вашего пути копирования. CMDlet экземпляра-копии позволяет указать имя файла назначения

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

Скопирует файл1.jpg и переименует его в файл2.jpg

Чтобы связать переменную с концом строки пути, вы должны использовать двойные кавычки следующим образом:

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

Обратите внимание, что параметры -path и -destination действительно не нужны, поскольку они подразумеваются положением.