Rename-Item error: Cannot rename because item does not exist
Rename-Item error: Cannot rename because item does not exist
我有以下 powershell 代码,它试图重命名文件夹中的所有 SQL 文件,为每个文件添加一个唯一的前缀,例如第一个前缀将是 '1001 - sp - C - ':
gci -Path 'C:\FolderToLookIn' -Exclude "1*" | ForEach-Object {
New-Object PSObject -Property @{
'LineNumber' = $linenumber;
'Name' = $_.Name;
'Extension' = $_.Extension
};
$linenumber++
} | Where-Object {
$_.Extension -eq ".sql"
} | Rename-Item -NewName {$_.LineNumber.ToString("1000") + ' - sp - C - ' + $_.Name}
但是,这会产生如下错误:
Rename-Item : Cannot rename because item at '@{Extension=.sql; LineNumber=22; Name=sp_Firm_GetAll.sql}' does not exist.
那么,如何添加 LineNumber
属性 并将其用作 Rename-Item
命令中的前缀而不丢失项目本身?
编辑
我也尝试了以下方法,通过 FullName
并在 Rename-Item
中使用它:
gci -Path 'C:\FolderToSearch' -Exclude "1*" | ForEach-Object {
New-Object psObject -Property @{
'LineNumber' = $linenumber;
'Name' = $_.Name;
'Extension' = $_.Extension;
'FullName' = $_.FullName
};
$linenumber++
} | Where-Object {
$_.Extension -eq ".sql"
} | Rename-Item -Path $_.FullName -NewName {$_.LineNumber.ToString("1000") + ' - sp - C - ' + $_.Name}
但是,这个错误也是:
Rename-Item : Cannot bind argument to parameter 'Path' because it is null.
At line:3 char:19
+ Rename-Item -Path $_.FullName -NewName {$_.LineNumber.ToString("1000") + ' - sp
作为
- Rename-Item 接受管道输入,
ForEach
不是必需的,
- 使用
[Ref]
您可以在 -NewName {scriptblock}
中增加一个计数器
$Folder = 'C:\FolderToLookIn'
$Count = [ref] 0
Get-ChildItem -Path $Folder -Filter *.sql -File |
Where-Object Name -NotMatch '^\d{4} - sp - C - ' |
Rename-Item -Newname {"{0:1000} - sp - C - {1}" -f $Count.Value++,$_.Name}
具有 A.sql、B.sql、C.sql 的示例文件夹将具有以下结果:
> gci *.sql -name
1000 - sp - C - A.sql
1001 - sp - C - B.sql
1002 - sp - C - C.sql
首先从现有文件中获取last/highest数字或设置1000为开始的变体。
$Count = [Ref][math]::Max(1000,
[int](Get-ChildItem -Path $Folder -Filter *.sql -File|
Where-Object Name -match '^(\d{4}) - sp - C -' |
Select-Object @{n='Count';e={$Matches[1]}} -Last 1).Count)
Get-ChildItem -Path $Folder -Filter *.sql -File |
Where-Object Name -NotMatch '^\d{4} - sp - C - ' |
Rename-item -Newname {"{0:D4} - sp - C - {1}" -f ++$Count.Value,$_.Name}
我有以下 powershell 代码,它试图重命名文件夹中的所有 SQL 文件,为每个文件添加一个唯一的前缀,例如第一个前缀将是 '1001 - sp - C - ':
gci -Path 'C:\FolderToLookIn' -Exclude "1*" | ForEach-Object {
New-Object PSObject -Property @{
'LineNumber' = $linenumber;
'Name' = $_.Name;
'Extension' = $_.Extension
};
$linenumber++
} | Where-Object {
$_.Extension -eq ".sql"
} | Rename-Item -NewName {$_.LineNumber.ToString("1000") + ' - sp - C - ' + $_.Name}
但是,这会产生如下错误:
Rename-Item : Cannot rename because item at '@{Extension=.sql; LineNumber=22; Name=sp_Firm_GetAll.sql}' does not exist.
那么,如何添加 LineNumber
属性 并将其用作 Rename-Item
命令中的前缀而不丢失项目本身?
编辑
我也尝试了以下方法,通过 FullName
并在 Rename-Item
中使用它:
gci -Path 'C:\FolderToSearch' -Exclude "1*" | ForEach-Object {
New-Object psObject -Property @{
'LineNumber' = $linenumber;
'Name' = $_.Name;
'Extension' = $_.Extension;
'FullName' = $_.FullName
};
$linenumber++
} | Where-Object {
$_.Extension -eq ".sql"
} | Rename-Item -Path $_.FullName -NewName {$_.LineNumber.ToString("1000") + ' - sp - C - ' + $_.Name}
但是,这个错误也是:
Rename-Item : Cannot bind argument to parameter 'Path' because it is null. At line:3 char:19 + Rename-Item -Path $_.FullName -NewName {$_.LineNumber.ToString("1000") + ' - sp
作为
- Rename-Item 接受管道输入,
ForEach
不是必需的, - 使用
[Ref]
您可以在-NewName {scriptblock}
中增加一个计数器
$Folder = 'C:\FolderToLookIn'
$Count = [ref] 0
Get-ChildItem -Path $Folder -Filter *.sql -File |
Where-Object Name -NotMatch '^\d{4} - sp - C - ' |
Rename-Item -Newname {"{0:1000} - sp - C - {1}" -f $Count.Value++,$_.Name}
具有 A.sql、B.sql、C.sql 的示例文件夹将具有以下结果:
> gci *.sql -name
1000 - sp - C - A.sql
1001 - sp - C - B.sql
1002 - sp - C - C.sql
首先从现有文件中获取last/highest数字或设置1000为开始的变体。
$Count = [Ref][math]::Max(1000,
[int](Get-ChildItem -Path $Folder -Filter *.sql -File|
Where-Object Name -match '^(\d{4}) - sp - C -' |
Select-Object @{n='Count';e={$Matches[1]}} -Last 1).Count)
Get-ChildItem -Path $Folder -Filter *.sql -File |
Where-Object Name -NotMatch '^\d{4} - sp - C - ' |
Rename-item -Newname {"{0:D4} - sp - C - {1}" -f ++$Count.Value,$_.Name}