2017-02-17 10 views
0

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

##DateStamp 

$DateStamp = get-date -uformat "%Y%m%d" 

$files = @(get-childitem C:\PowershellTesting\FolderTwo\*.csv) 

    foreach ($file in $files)  
{ 
get-childitem | rename-item $file -NewName {"CompanyName" + $DateStamp + ".csv"}} 

Сценарий на самом деле работает в переименовании файла, хотя она по-прежнему дает мне Multipler повторений этой ошибки:

rename-item : Cannot rename because item at 'C:\PowershellTesting\FolderTwo\17Feb17082308_CompanyName_20170217.csv' does not exist. 
At line:11 char:18 

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

+0

Если удалить эту Get-ChildItem, то он не работает на всех, и дает мне эту ошибку: Rename-Item: Не удается оценить параметр «NEWNAME», потому что ее аргумент указан как блок сценария, и нет ввода. Блок сценария не может быть оценен без ввода – Ricky

ответ

1
get-childitem | rename-item $file -NewName {"CompanyName" + $DateStamp + ".csv"}} 

Ваш рабочий каталог, что будет возвращен и передан Rename-Item здесь каждый Csv. Удалите Get-ChildItem и просто используйте элемент rename, так как у вас есть файл-объект как $file в любом случае. Это было бы самым маленьким изменением, чтобы получить то, что вы хотите.

$file | rename-item -NewName {"CompanyName" + $DateStamp + ".csv"}} 

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

Это может быть сокращено до следующего. Имейте в виду выше предостережение еще применяется

$DateStamp = get-date -uformat "%Y%m%d" 
Get-ChildItem "C:\PowershellTesting\FolderTwo\*.csv" | 
    Rename-Item -NewName {"CompanyName" + $DateStamp + ".csv"} 
+0

Спасибо - и я думаю, что файл будет удален после его отправки, поэтому должен быть только один файл в папке при запуске скрипта. – Ricky