批量从字符串中删除字符

时间:2010-09-17 05:57:41

标签: batch-file

这看起来很基本但有没有办法创建批处理从txt文件中删除字符串中的char。 ?

如果我已经在.txt文件中有这个

2005060.png  
2005070.png  
2005080.png  
2005090.png

有没有办法创建一个批处理文件,该文件将删除末尾的.png以仅在新的.txt文件中显示此内容

2005060  
2005070  
2005080  
2005090

感谢您的帮助! :)

3 个答案:

答案 0 :(得分: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)并使用一些真正的脚本语言。

答案 1 :(得分:8)

这对我来说效果最好:

@echo off
for %%x in (*.png) do  echo %%~nx

credit

答案 2 :(得分:1)

如果您尝试读取.png文件的目录并输出没有扩展名的列表? 试试这个:

    @echo off

    echo. > testprog.txt

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

    start testprog.txt