PowerShell-循环浏览文件并重命名

PowerShell-循环浏览文件并重命名,powershell,scripting,Powershell,Scripting,我是新手。我正在尝试编写PowerShell脚本以: 循环浏览目录中的所有文件 列表项 仅获取所有.pdf文件 重命名它们文件名很长-超过30个字符 -它们包含2个我需要提取的数字 -例如: Microsoft Dynamics NAV 2018 Build 25480.pdf的累积更新11-> 结果:=18CU11.pdf 我尝试了很多网站的例子,但我似乎连循环都不能成功。 或者获取一个错误-该路径不存在,或者无法重命名文件,因为loop以某种方式获取了一个文件路径,而我无法重命名该路径 Ge

我是新手。我正在尝试编写PowerShell脚本以:

循环浏览目录中的所有文件 列表项 仅获取所有.pdf文件

重命名它们文件名很长-超过30个字符 -它们包含2个我需要提取的数字 -例如:

Microsoft Dynamics NAV 2018 Build 25480.pdf的累积更新11-> 结果:=18CU11.pdf

我尝试了很多网站的例子,但我似乎连循环都不能成功。 或者获取一个错误-该路径不存在,或者无法重命名文件,因为loop以某种方式获取了一个文件路径,而我无法重命名该路径

Get-ChildItem "C:\Users\******\Desktop\PowerShell Practice" -Filter *.pdf |  #create list of files

ForEach-Object{
    $oldname = $_.FullName;
    $newname = $_.FullName.Remove(0,17); 
    #$newname = $_.FullName.Insert(0,"CU")

    Rename-Item $oldname $newname;

    $oldname;
    $newname;  #for testing
}
这只是最新的尝试,但任何其他方法都可以——只要它能起作用

请试试这个

Get-ChildItem -Path "C:\Users\******\Desktop\PowerShell Practice-Filter" -Filter *.pdf | Rename-Item -NewName $newname
查看帮助以获取更多信息。参数-NewName只需要文件名,而不需要完整路径

试试这个:

Get-ChildItem "C:\Users\******\Desktop\PowerShell Practice-Filter" -Filter *.pdf |  #create list of files

ForEach-Object{
    $oldname = $_.FullName
    $newname = $_.Name.Remove(0,17)

    Rename-Item -Path $oldname -NewName $newname

    $oldname
    $newname  #for testing
}
试试这个逻辑:

[string]$rootPathForFiles=加入路径-路径$env:USERPROFILE-ChildPath“桌面\PowerShell实践” [string[]$listOfFilesToRename=Get ChildItem-Path$rootPathForFiles-Filter'*.PDF'| Select Object-ExpandProperty FullName $listOfFilesToRename | ForEach对象{ 从目录中获取文件名 [string]$newName=拆分路径-路径$\叶 使用regex replace应用新格式 $newName=$newName-替换“^Cumulative Update\d+.*NAV 20\d+.*$”,“$2CU$1.pdf”采用特定格式;如果更新不符合此要求,则保留原始文件名 执行重命名 Write Verbose重命名“$\”为“$newName”-Verbose在此处添加了Verbose开关,这样您就可以看到输出,而不用担心Verbose首选项 重命名项-路径$\ux-NewName$NewName }
您的原始文件名看起来如何?如果它说路径不存在,那么可能。。路径不存在?您应该包括您尝试的实际输出!和$newname是否对所有文件都相同?否,但重命名的逻辑对所有文件都相同。仍会引发错误-重命名项无法重命名指定的目标,因为它表示路径或设备名称。