powershell - 重命名项目错误:无法重命名,因为项目不存在
问题描述
我有以下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}
但是,这会产生如下错误:
重命名项目:无法重命名,因为项目位于 '@{Extension=.sql; 行号=22;名称=sp_Firm_GetAll.sql}' 不存在。
那么,如何在不丢失项目本身的情况下添加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}
但是,此错误也:
重命名项目:无法将参数绑定到参数“路径”,因为它为空。 在行:3 字符:19 + 重命名项目 - 路径 $_.FullName -NewName {$_.LineNumber.ToString("1000") + ' - sp
解决方案
作为
- Rename-Item 接受
ForEach
不必要的管道输入,并且 - 使用 a
[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
首先从现有文件中获取最后/最高数字或将 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}
推荐阅读
- python - 无法使用参数化查询通过 python 从数据库中获取记录
- python - DataFrame 对象 Statmodels
- javascript - 对具有多个模型的 JS 应用程序使用 MVC 模式
- api - 创建新迭代时出现错误“值不能为空:nodeName”
- java - 放心证书问题
- python - HTML Img Src 变量
- c# - 尝试在 .Net5 中发布时出现 Nuget 错误
- vue.js - URL Rewrite 被 Vue Router 重写
- matlab - Matlab 类型转换转移到 python 3.7
- jquery - 当在 jquery 中未选中复选框时,我试图从输入字段中删除 required