我的文件夹中有很多文件。文件名看起来像这样
12AB34-A1.txt 12AB34-AE.txt 12AB34-P1.txt 12AB34-ZS.txt
我要检查文件夹中的文件是否存在,然后选择其中一个文件,然后重命名。
我尝试使用此代码,但仍然给我错误。
if (Test-Path -Path "C:\Users\SS\Work\*.txt") {
Write-Host "Job.cue File is exist"
$Pro = Get-ChildItem -Path C:\Users\SS\Work | Where-Object{$_.Contains("-A1")}
$Pro
Rename-Item $Pro -NewName ($Pro.BaseName).ini
Write-Host "Rename Finished"
}
答案 0 :(得分:0)
您必须将其更改为
ls /brokers/ids
您仍然必须考虑$Pro = Get-ChildItem -Path C:\Users\SS\Work | Where-Object{$_.Name -like "*-A1*")}
可能有多个结果这一事实。
因此,您可能希望将其包含在$pro
循环中
foreach
答案 1 :(得分:0)
像这样的事情可能使跟踪事态更容易:
$files = Get-ChildItem -Path c:\path\to\folder\containing\files
foreach ($file in $files){
if ($file.BaseName -like "*-A1*"){
Write-Host "Currently renaming: $($file.Name) "
$newName = $file.BaseName + ".ini"
Rename-Item $file.FullName -NewName $newName
}else{
#Do nothing since files doesn't have '-A1' in its name
}
}
答案 2 :(得分:0)
$Pro
仅扩展为文件名($Pro.Name
)而不是完整路径($Pro.FullName
),因此该语句在您当前的工作环境中找不到文件目录。另外,Contains()
必须在文件对象的属性(例如$_.Name.Contains('-A1')
)上调用,而不是直接在对象上调用。
您可以通过更改来解决问题
Rename-Item $Pro -NewName ($Pro.BaseName).ini
到
Rename-Item $Pro.FullName -NewName ($Pro.BaseName).ini
但是,您的代码隐式假设Get-ChildItem
仅返回单个结果。该语句返回多个项目时,它将中断,因为Rename-Item
仅接受一个源路径。
解决此问题的更好方法是通过管道将Get-ChildItem
结果直接输入Rename-Item
:
Get-ChildItem -Path 'C:\Users\SS\Work' -Filter '*-A1*' |
Rename-Item -NewName { $_.BaseName + '.ini' }
这可以解决路径问题以及多个结果。