У меня есть следующий код 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: невозможно переименовать, поскольку элемент в @ @ Extension = .sql; LineNumber = 22; Name = 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}
Однако, эти ошибки также:
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