Powershell循环工作但仍然返回错误

时间:2017-02-17 14:13:05

标签: loops 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"}}

该脚本实际上可以重命名文件,虽然它仍然给我多次迭代这个错误:

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

我猜这是因为一旦文件被重命名,循环就不会退出,因为只有一个。鉴于它有效,我猜测我错过了一些简单的东西,可以帮助我摆脱错误?

1 个答案:

答案 0 :(得分:1)

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

您的工作目录将返回并传递给Rename-Item 每个csv 。删除Get-ChildItem并使用重命名项,因为无论如何您都将文件对象设为$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"}