英文:
Find Files in Subdirectories with Specific Text and Rename
问题
以下是您要翻译的代码部分:
Get-ChildItem -filter *-poster* -recurse | ForEach {Rename-Item $_ -NewName "poster.jpg";}
请注意,这是一段用于在根文件夹中搜索所有子目录中的文件并重命名这些文件的命令,将其重命名为"poster.jpg",但不更改文件扩展名。这个命令将查找文件名中包含"-poster"的文件,并将它们重命名为"poster.jpg"。
英文:
From root folder, I am trying to search all files in subdirectories with "-poster" and rename those files to only poster without changing the file extension. All these files have other text in front of the "-poster" that I want to remove, and all the files are .jpgs.
Would a command such as this work:
Get-ChildItem -filter *-poster* -recurse | ForEach {Rename-Item $_ -NewName "poster.jpg"}
I haven't tried it, as don't want to risk changing other files.
答案1
得分: 1
以下是代码部分的翻译:
Use the -WhatIf
common parameter to preview an operation without actually performing it:
使用 -WhatIf
通用参数 来在实际执行之前 预览 操作:
Get-ChildItem -Filter *-poster* -Recurse |
Rename-Item -NewName poster.jpg -WhatIf
Note:
-
-WhatIf
does not test actual runtime conditions. -
-WhatIf
不会测试实际的运行时条件。 -
That is, if a
poster.jpg
file already exists in the target directory, theRename-Item
call will fail once-WhatIf
is removed. -
换句话说,如果目标目录中已经存在一个名为
poster.jpg
的文件,一旦去掉-WhatIf
,Rename-Item
调用将会 失败。 -
To handle this case, you have the following options, depending on your use case:
-
Allow the failure, if you don't expect a preexisting file.
-
允许失败,如果你不希望有已存在的文件。
-
Ignore the failure, if a preexisting file implies that no action is needed: add
-ErrorAction Ignore
to theRename-Item
call. -
忽略失败,如果已存在的文件意味着不需要采取任何操作:在
Rename-Item
调用中添加-ErrorAction Ignore
。 -
Blindly overwrite the existing file, by adding
-Force
to theRename-Item
call. -
通过在
Rename-Item
调用中添加-Force
来 盲目覆盖 已存在的文件。 -
Create a file with a different name, such as by appending a sequence number, using a delay-bind script block - see below.
-
创建一个具有不同名称的文件,例如通过添加一个 序列号,使用 延迟绑定脚本块 - 请参见下文。
-
Get-ChildItem -Filter *-poster* -Recurse |
Rename-Item -NewName {
$newBaseName = 'poster.jpg'
$newBaseName = [IO.Path]::GetFileNameWithoutExtension($newName)
$newExtension = [IO.Path]::GetExtension($newName)
$suffix = ''
if ([array] $preexisting = Get-ChildItem -File -LiteralPath $_.DirectoryName -Filter "$newBaseName*$newExtension")) {
$highestNumSoFar = [int[]] ($preexisting.BaseName -replace '^.*\D') | Sort-Object -Descending | Select-Object -First 1
$suffix = $highestNumSoFar + 1
}
$newBaseName + $suffix + $newExtension
} -WhatIf
希望这些翻译对您有帮助。如果有任何其他问题,请随时提问。
英文:
<!-- language-all: sh -->
Use the -WhatIf
common parameter to preview an operation without actually performing it:
Get-ChildItem -Filter *-poster* -Recurse |
Rename-Item -NewName poster.jpg -WhatIf
Note:
-
-WhatIf
does not test actual runtime conditions. -
That is, if a
poster.jpg
file already exists in the target directory, theRename-Item
call will fail once-WhatIf
is removed. -
To handle this case, you have the following options, depending on your use case:
-
Allow the failure, if you don't expect a preexisting file.
-
Ignore the failure, if a preexisting file implies that no action is needed: add
-ErrorAction Ignore
to theRename-Item
call. -
Blindly overwrite the existing file, by adding
-Force
to theRename-Item
call. -
Create a file with a different name, such as by appending a sequence number, using a delay-bind script block - see below.
-
Get-ChildItem -Filter *-poster* -Recurse |
Rename-Item -NewName {
$newBaseName = 'poster.jpg'
$newBaseName = [IO.Path]::GetFileNameWithoutExtension($newName)
$newExtension = [IO.Path]::GetExtension($newName)
$suffix = ''
if ([array] $preexisting = Get-ChildItem -File -LiteralPath $_.DirectoryName -Filter "$newBaseName*$newExtension")) {
$highestNumSoFar = [int[]] ($preexisting.BaseName -replace '^.*\D') | Sort-Object -Descending | Select-Object -First 1
$suffix = $highestNumSoFar + 1
}
$newBaseName + $suffix + $newExtension
} -WhatIf
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论