通过Powershell使用从文件路径和名称中拆分的变量重命名多个文件

通过Powershell使用从文件路径和名称中拆分的变量重命名多个文件,powershell,Powershell,我有一个重命名脚本,有一小部分给我带来了问题。我需要重命名jpg文件名的一部分,并将其与文件路径分开 文件示例: "C:\WK53\WK5330002\WK44006679\spin1\01_img_0029.JPG" 在上面的例子中,我想将01_img_0029.JPG重命名为WK44006679_0029.JPG,因此将文件名的字符串0,1替换为文件路径的-3 我可以推导出我想要的名称的两部分,但是我在实际重命名逻辑上遇到了问题。以下分离株‘WK44006679’和第二株‘0029’: $

我有一个重命名脚本,有一小部分给我带来了问题。我需要重命名jpg文件名的一部分,并将其与文件路径分开

文件示例:

"C:\WK53\WK5330002\WK44006679\spin1\01_img_0029.JPG"
在上面的例子中,我想将
01_img_0029.JPG
重命名为
WK44006679_0029.JPG
,因此将文件名的字符串0,1替换为文件路径的-3

我可以推导出我想要的名称的两部分,但是我在实际重命名逻辑上遇到了问题。以下分离株‘WK44006679’和第二株‘0029’:

$jpgToRename = GCI -Path $pathToRename -Filter '*.jpg' -R | ForEach-Object{
$newJpgASIN = $jpg.FullName.split('\')[-3]
$oldJpgName = $jpg.Name.split('_')[2]
}
我尝试了这个,但没有成功:

$jpgToRename = GCI -Path $pathToRename -Filter '*.jpg' -R | ForEach-Object{
$newJpgASIN = $jpg.FullName.split('\')[-3]
$oldJpgName = $jpg.Name.split('_')[2]
Rename-Item -NewName {$_.Name -replace $oldJpgName,'_'+$newJpgASIN}
}

感谢您的帮助。谢谢

像这样的东西怎么样

$splitPath = ("C:\WK53\WK5330002\WK44006679\spin1\01_img_0029.JPG").Split("\\")

$newName = $splitPath[3] + ($splitPath[-1][2..($splitPath[-1].Length - 1)] -join "")

像这样的怎么样

$splitPath = ("C:\WK53\WK5330002\WK44006679\spin1\01_img_0029.JPG").Split("\\")

$newName = $splitPath[3] + ($splitPath[-1][2..($splitPath[-1].Length - 1)] -join "")

对Jordan Regan的最后一个建议进行了细微更改

$splitPath = ("C:\WK53\WK5330002\WK44006679\spin1\01_img_0029.JPG").Split("\\")

$YoMammy = -Join($splitPath[3],'_',$(($splitPath[-1]).split('_')[-1]))

对Jordan Regan的最后一个建议进行了细微更改

$splitPath = ("C:\WK53\WK5330002\WK44006679\spin1\01_img_0029.JPG").Split("\\")

$YoMammy = -Join($splitPath[3],'_',$(($splitPath[-1]).split('_')[-1]))

Rename Item$.FullName-NewName($.Name-replace$oldJpgName,'''+$newJpgASIN}
->
Rename Item$.FullName-NewName($.Name-replace$oldJpgName,('.'+$newJpgASIN))
重命名Item-NewName{$.'.'+$newjpgname-替换$oldJpgName,''+$newJpgASIN}->
重命名Item$.FullName-NewName($.oldjpgasin)
如何将目录中的每个jpg通过此文件传递?我没有看到真正更改名称的cmdlet。好吧,我现在明白了,对于其他用户:使用我上面的代码,包括get childitem位,并用'Foreach($jpg in$jpgToRename){}替换Foreach对象用上述变量替换$newJpgASIN和$oldJpgName,并使用“Rename Item$jpg.FullName-NewName$NewName”如何通过该变量传递目录中的每个jpg?我没有看到一个cmdlet会真正更改名称。好吧,我现在明白了,对于其他用户:使用我上面的代码,包括get childitem位,用“Foreach($jpgToRename中的jpg){}替换Foreach对象,用上述变量替换$newJpgASIN和$oldJpgName,并使用“Rename Item$jpg.FullName-NewName$NewName”