我有一个脚本可以重命名从CSV中获取的文件但是在它已经执行成功的程序后尝试重新重命名文件时会引发错误
CSV文件就像:
old new
AC100 DC100
AC101 DC102
代码尝试了:
$sourceDir = read-host "Please enter source Dir:"
$csvL = $sourceDir + "\files.csv"
$csv = import-csv $csvL
$files = get-childitem $sourceDir
$csv | % {
ForEach( $file in $files){
if($file = $_.old){
$old = $sourceDir + "\" + $_.old
Rename-Item $old $_.new
}
}
}
我相信它与循环和csv有关但我不确定我哪里出错了,我之前遇到过类似的问题。
以下是错误示例。
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist.
At C:\scripts\renamerTim.ps1:18 char:15
+ Rename-Item <<<< $old $_.new
提前谢谢,
克雷格
答案 0 :(得分:1)
我认为ForEach( $file in $files)
是多余的,因为您已经使用$csv | % {
命令遍历每个“文件”。我会尝试类似的事情:
$csv | Foreach-Object { //I prefer to print the full commands in scripts
$oldfile = $sourcedir + "\" + $_.old
if (Test-Path $oldfile)
{
Rename-Item $oldfile ($sourcedir + "\" + $_.new)
}
}
答案 1 :(得分:1)
你有一个冗余的嵌套循环。 $csv | %{ ... }
已遍历csv中的文件,然后foreach循环遍历文件夹中的每个文件。
试试这个:
$sourceDir = read-host "Please enter source Dir:"
$csvL = $sourceDir + "\files.csv"
$csv = import-csv $csvL
$files = get-childitem $sourceDir
$csv | % {
$oldpath = join-path $sourcedir $_.old
$newpath = join-path $sourcedir $_.new
rename-item $oldpath $newpath
}