Win Batch File - 删除第一个文件扩展名

Win Batch File - Remove First File Extension

提问人:tecdoc ukr net 提问时间:11/14/2023 更新时间:11/16/2023 访问量:74

问:

在 Windows 的批处理文件中使用命令是一种明确的方法,可以从目录中的所有文件中删除第一个文件扩展名。例如rename

1.txt.png => 1.png 
2.txt.png => 2.png

现在,我使用两种有效的重命名方法。但在我看来,这些方法看起来很“肮脏”。

1 方法。我不喜欢第一种方法,因为我执行了两次。rename

rename *.txt.png *.
rename *.txt *.png

2方法。我不喜欢第二种方法,因为从理论上讲,字符数“?”可以小于文件的基本名称(不带扩展名)。

rename *.txt.png ??????????????????????????????.png

?Clear 方法

我想运行一个这样的命令,但它不起作用。rename *.txt.png *.png

windows cmd 重命名 批处理重命名

评论

0赞 Compo 11/14/2023
是的,有一条清晰的道路。然而,你对清晰的想法是否与其他人相同,我们不知道。从本质上讲,您正在寻求意见(这是题外话),或者为您提供他们的代码(不是本网站的目的)。
2赞 aschipfl 11/14/2023
命令行代码(批处理文件中的 -signs 加倍)呢?for /F "eol=| delims=" %I in ('dir /B /A:-D-H-S "*.txt.png"') do for %J in ("%~nI") do ren "%~I" "%~nJ%~xI"%
0赞 tecdoc ukr net 11/14/2023
我认为该命令可以自行完成我需要的操作。只是不清楚如何正确指示通配符rename
1赞 aschipfl 11/15/2023
好吧,@tecdocukrnet,我不认为普通命令可以做到这一点,除了您的第二个方法具有足够的 s – 请参阅: Windows RENAME 命令如何解释通配符?[超级用户]rename?

答:

1赞 lit 11/14/2023 #1

下面是一个命令,它将按照描述重命名文件。当您确信文件将被正确重命名时,请从命令中删除。cmd-WhatIfRename-Item

如果使用的是较旧的 Windows PowerShell 而不是 PowerShell Core,请更改为 .pwshpowershell

pwsh -NoLogo -NoProfile -Command ^
    "Get-Childitem -Filter '*.*.*' |" ^
        "ForEach-Object {" ^
            "if ($_.Name -match '(.*)\..*(\..*)') {" ^
                "Rename-Item -Path $_.FullName -NewName ($($Matches[1])+$($Matches[2])) -WhatIf" ^
            "}" ^
        "}"
0赞 OJBakker 11/16/2023 #2
@echo off

for %%A in ("*.txt.*") do call :SubRen "%%A"

pause
exit/b

:SubRen
set "Name=%~1"
if /I not "%Name%" == "%Name:.txt.=.%" ECHO ren "%Name%" "%Name:.txt.=.%"
if /I not "%Name%" == "%Name:.txt.=.%" ren "%Name%" "%Name:.txt.=.%"
exit/b