【问题标题】:In Window Batch - how do I remove leading spaces from a file?在 Window Batch 中 - 如何从文件中删除前导空格?
【发布时间】:2015-10-21 14:56:09
【问题描述】:

我有一个文件 ttt.txt。内容/格式是这样的:

  AAA BBB
  AAA CCC
  _
  CCC DDD
  1. 每行有 2 个前导空格;
  2. 有些行只有 1 个 understore 标志>

我需要:

  1. 删除那些只有 1 个底层符号 (_) 的空行;
  2. 我需要修剪每行的前导空格。

这是我当前的脚本:

:: ===== Here to underscore lines
type ttt.txt |  findstr /v "^_"  >Final.txt

@echo off
setlocal enabledelayedexpansion

for /F "tokens=*" %%A in (ttt.txt) do (
    set line=%%A
echo(!line:~1!>>myFinal.txt
)

【问题讨论】:

    标签: batch-file cmd


    【解决方案1】:

    处理文本文件时,FOR 处理会自动删除前导空格。因此,您真正需要做的只是检查行值是否等于下划线,如果是,则忽略它。

    @ECHO OFF
    SETLOCAL
    
    FOR /F "tokens=*" %%A IN (ttt.txt) DO (
        IF NOT "%%A"=="_" ECHO %%A>>myFinal.txt
    )
    
    ENDLOCAL
    

    编辑:根据您更改的要求,以下内容也将验证长度是否为 3 或更长。

    @ECHO OFF
    SETLOCAL EnableDelayedExpansion
    
    FOR /F "tokens=*" %%A IN (ttt.txt) DO (
        SET Line=%%A
    
        REM Verify it is not an underscore.
        IF NOT "!Line!"=="_" (
    
            REM Check that the length is 3 chars or longer.
            SET Char=!Line:~2,1!
            IF NOT "!Char!"=="" (
    
                REM All conditions satisfied.
                ECHO %%A>>myFinal.txt
            )
        )
    )
    
    ENDLOCAL
    

    【讨论】:

    • 最重要的是,如何删除行,其中行仅包含少于 3 个字符?
    • @PaulZ - 我已根据您的“新”要求更新了答案。请务必提前列出这些内容,以便获得相关帮助。
    • @JasonFaulkner,你可以简化一下。 IF NOT "!Line:~2,1!"=="" ECHO %%A>>myFinal.txt 只是一个建议。
    • @Squashman - 是的。为了教育目的,我试图更加深思熟虑。另外,如果添加了更多要求,我将打印行分开;)
    • 代码仍然不起作用:处理后,我的文件显示为:_ EPMRAXAZFB EPMAXSN 我使用了以下代码:@ECHO OFF SETLOCAL FOR /F "tokens=*" %%A IN (tempGrp1. txt) DO ( SET Line=%%A IF NOT "!Line:~2,1!"=="" ECHO %%A>>tempGrp.txt ) ENDLOCAL 我希望第一行 "_" (前导下划线带有某些空格)被删除,但这似乎不起作用。
    【解决方案2】:
    @echo off
    FOR /F "tokens=* delims= " %%G IN (ttt.txt) DO ECHO %%G|findstr /R /V /C:"^_$">>final.txt
    

    编辑: 由于您现在要求该行至少有 3 个字符长,因此开头只有下划线的行成为静音点。所以你只需要这个。

    @echo off
    FOR /F "tokens=* delims= " %%G IN (ttt.txt) DO >>Final.txt (ECHO %%G|FINDSTR /R /C:"^...")
    

    【讨论】:

    • 最重要的是,如何删除行,其中行仅包含少于 3 个字符?
    • @PaulZ,我相信你没有意识到,当你添加额外的要求之后,代码会完全改变,这浪费了大家的时间。在任何人开始重写他们的所有代码之前,您还有其他要求吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多