我是新手,没有任何编码知识或经验或软件,但我使用 Windows 10。我有很多文件,名称如下:
(1) 2020-03-12.mp3
(7) 2021-04-10.mp4
(6) 2022-08-25.docx
等。
它们主要是 mp4、mp3、jpg、pdf、docx、xlsx。我想切换这些元素,所以像第一个元素将被命名为:
2020-03-12 (1).mp3
你能帮忙吗,谢谢 x
答案1
这是完成这项工作的一种方法...... [咧嘴笑]
代码 ...
$TopDir = $env:TEMP
#region >>> make some files to work with
# when ready to use the real items, remove the entire "#region/#endregion" block
@'
(1) 2020-03-12.mp3
(7) 2021-04-10.mp4
(6) 2022-08-25.docx
'@ -split [System.Environment]::NewLine |
ForEach-Object {
# the "$Null =" is to supress unwanted output from the cmdlet
$Null = New-Item -Path $TopDir -Name $_ -ItemType 'File' -Force
}
#endregion >>> make some files to work with
$FileList = Get-ChildItem -LiteralPath $TopDir -Filter '(*)*.*'
foreach ($FL_Item in $FileList)
{
$NewBaseName = $FL_Item.BaseName -replace '^(.+)\s(.+)$', '$2 $1'
$NewName = -join ($NewBaseName, $FL_Item.Extension)
# remove the "-WhatIf" to make actual changes
Rename-Item -Path $FL_Item.FullName -NewName $NewName -WhatIf
}
它能做什么 ...
- 设置要工作的源目录
按原样测试后,创建一组要处理的文件,只需删除整个#region/#endregion
块并将其设置$TopDir
为目标文件夹。- 获取以以下项开头的文件列表
(*)
- 遍历该列表
- 通过捕获两个部分并交换它们来为文件创建一个新的 BaseName
- 通过连接新的 BaseName 和旧的来构建新的文件名
.Extension
- 重命名文件
此脚本的当前版本不会重命名任何内容...当您准备测试时,请删除或注释掉-WhatIf
重命名行末尾的参数。
输出与-WhatIf
...
What if: Performing the operation "Rename File" on target "Item: C:\Temp\(1) 2020-03-12.mp3 Destination: C:\Temp\2020-03-12 (1).mp3".
What if: Performing the operation "Rename File" on target "Item: C:\Temp\(6) 2022-08-25.docx Destination: C:\Temp\2022-08-25 (6).docx".
What if: Performing the operation "Rename File" on target "Item: C:\Temp\(7) 2021-04-10.mp4 Destination: C:\Temp\2021-04-10 (7).mp4".
答案2
在 PowerShell 中,操作 Cmdlet 将是Rename-Item
。
要构造新名称,您可以从基名称的财产系统.IO.文件信息返回的对象获取子项。
使用该Split
方法,BaseName 可以通过<Space>
字符进行拆分,返回一个双元素字符串数组:
PS C:\>>'(1) 2020-03-12'.Split(' ')
(1)
2020-03-12
PS C:\>
要“组装”新名称,有几种选择,但我建议-f(格式运算符),这样可以明确区分常量元素和变量元素。
因此,使用管道中的当前对象构造新名称的 ScriptBlock 将如下所示:
{ '{1} {0}{2}' -f ( $_.BaseName.Split(' ') + $_.Extension )}
因此,如果我们将该 scfiptblock 分配给一个变量,我们可以在重命名操作中使用它。假设当前目录中的所有文件都遵循命名格式并且需要重命名,那么这两行就可以解决问题:
$NewNameLogic = { '{1} {0}{2}' -f ( $_.BaseName.Split(' ') + $_.Extension )}
Get-ChildItem -File | Rename-Item -NewName $NewNameLogic
答案3
@echo off && cd /d "%~dp0"
for /f delims^= %%i in =;('where .:(*.*^|find /v "%~0"')do set "_name=%%~ni" & =;(
cmd.exe /v /c "rename "%%~fi" "%%_name:* =%% !_name: %%_name:* =%%=!%%~xi"" );=
您可以尝试使用:
:: [ Replace Variable: (From Substring: Replace Variable = To Noting ) = To Nothing ] ::
:: define variable
>set "_var=(1) 2020-03-12"
:: remove all before the first space
>echo %_var:* =%
2020-03-12
:: remove the inverse of [remove all before the first space]
>cmd /v /c "echo;!_var: %_var:* =%=!"
(1)
:: join the two replaces you have destination name
>cmd.exe /v /c "echo;!_var:* =! !_var: %_var:* =%=!.mp3"
2020-03-12 (1).mp3