批处理删除字符串中的字符

14
这可能看起来很基础,但有没有一种方法可以创建批处理来从txt文件中的字符串中删除字符?如果我已经在.txt文件中拥有这个字符串。
2005060.png  
2005070.png  
2005080.png  
2005090.png
所以是否有一种方法可以创建一个批处理文件,将结尾的 .png 删除,只显示这个内容在一个新的 .txt 文件中?
2005060  
2005070  
2005080  
2005090

感谢任何对此的帮助!:)


什么平台?Windows吗?如果是的话,您是否已安装PowerShell? - Tim Pietzcker
3个回答

21
你可以按照以下命令脚本执行此操作:
@setlocal enableextensions enabledelayedexpansion
@echo off
set variable=2005060.png
echo !variable!
if "x!variable:~-4!"=="x.png" (
    set variable=!variable:~0,-4!
)
echo !variable!
endlocal

这将输出:

2005060.png
2005060

当然,这个神奇的代码行是:

set variable=!variable:~0,-4!

这个函数会移除最后四个字符。


如果您有一个名为testprog.in的文件,其中包含以下内容:
2005060.png
1 2 3 4 5      leave this line alone.
2005070.png
2005080.png
2005090.png

你可以进行轻微的修改:

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "delims=" %%a in (testprog.in) do (
    set variable=%%a
    if "x!variable:~-4!"=="x.png" (
        set variable=!variable:~0,-4!
    )
    echo.!variable!
)
endlocal

输出结果为:

2005060
1 2 3 4 5      leave this line alone.
2005070
2005080
2005090

请记住,它不会输出空行(尽管它将输出包含空格的行)。

这可能不是问题,具体取决于输入文件中允许的内容。如果这是个问题,我的建议是获取CygWinGnuWin32(或者如果您的平台上有的话,使用Powershell)并使用一些真正的脚本语言。


8
这是我最好的解决方案:
@echo off
for %%x in (*.png) do  echo %%~nx

信用


非常感谢。 运作得非常好。 - knkarthick24

1
如果你想读取一个包含.png文件的目录并输出不带扩展名的列表,可以尝试以下代码:
    @echo off

    echo. > testprog.txt

    for /R "C:\Users\%USERNAME%\Documents" %%f in (*.png) do (
        echo %%~nf >> testprog.txt
        )

    start testprog.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接