PowerShell 为循环错误重命名文件夹中的文件

PowerShell Rename Files in Folder For Loop Error

我正在尝试批量重命名一个文件夹中的一堆 1000 个 *.json 文件,但我在实际执行脚本时遇到了问题。

每个文件被递增命名:
“图片 1.json”、“图片 2.json、.....“图片 1000.json”

我想将它们重命名为不带扩展名的整数 (-1)(我知道这听起来很奇怪,但必须这样做)。
所以

  1. “图片1.json”变为:0
  2. “图片2.json”变为:1
  3. “图片423.json”变为:422
  4. “图片1000.json”变为:998

为了不把事情搞砸,我创建了一个仅包含前 10 个文件的测试文件夹:

我保存了它:C:\test\testfolder

这是我的脚本

$files = Get-Content
$x = 0
foreach ($file in $files) {
   Rename-Item $file $x
   $x++
}

我将脚本保存在:C:\test\rename.ps1

在 PowerShell 中,我导航到目录:

cd c:\test\testfolder\

然后在 PowerShell 中我 运行 脚本

C:\test\rename.ps1

Power shell 然后给我这个(“它要求我输入,我正在输入数字......它无处可去):

我做错了什么?

这应该可以解决问题:

$folder = 'X:\path\to\jsonfolder'
$i = 0
Get-ChildItem -Path $folder -Filter *.json |
Sort-Object { [int][regex]::Match($_.BaseName,'\d+').Value } |
Rename-Item -NewName { [string]([ref]$i).Value++ }

Sort-Object 在那里是因为根据你的文件命名,没有它,你会从 Image 1.json图片10.json等等:

-a----          7/2/2021   7:32 PM              2 Image 1.json    
-a----          7/2/2021   7:32 PM              2 Image 10.json   
-a----          7/2/2021   7:32 PM              2 Image 100.json  
-a----          7/2/2021   7:32 PM              2 Image 1000.json 
-a----          7/2/2021   7:32 PM              2 Image 101.json  
-a----          7/2/2021   7:32 PM              2 Image 102.json  

([ref]$i).Value++ 技巧来自 ,归功于 mklement0。

Get-Content reads content from a file or stream, but you want to read the filenames in a directory. Get-ChildItem 是一种方法;指定您的路径或使用当前目录,如下所示。

不要忘记按扩展名过滤,*.json

我不确定您是真的想要序列号还是想要从文件名中提取的数字。如果是后者,你可以试试:

$files = Get-ChildItem *.json

foreach ($file in $files) {
    $newfile = $file -replace '(?<=\)Image (\d+)\.json$', ''
    Rename-Item $file $newfile -WhatIf
}

如果您想真正完成这项工作,请删除 -WhatIf

样本运行:

    Directory: C:\Users\foo\Desktop\test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          7/2/2021     15:12              6 Image 1.json
-a----          7/2/2021     15:12              6 Image 2.json
-a----          7/2/2021     15:12              6 Image 3333.json
-a----          7/2/2021     15:46            250 rename.ps1


PS C:\Users\foo\Desktop\test> .\rename.ps1
What if: Performing the operation "Rename File" on target "Item: C:\Users\foo\Desktop\test\Image 1.json Destination: C:\Users\foo\Desktop\test".
What if: Performing the operation "Rename File" on target "Item: C:\Users\foo\Desktop\test\Image 2.json Destination: C:\Users\foo\Desktop\test".
What if: Performing the operation "Rename File" on target "Item: C:\Users\foo\Desktop\test\Image 3333.json Destination: C:\Users\foo\Desktop\test33".