从 .txt 文件中删除所有空格、制表符

Removing all spaces, tabs from a .txt file

我想从 txt 文件中删除所有空格和制表符。以下是我尝试执行此操作的代码:

for /F "delims=" %%a in (CODE_CHECK.txt) do (
   set one=%%a
   set one=%one:=%
) >> CODE_CHECK_2.txt

示例文件行:

ONE VIEW

TWO PACKEGE BODY

代码之后应该是:

ONEVIEW

TWOPACKEGEBODY

假设您在 Windows 平台上,由于您提供的代码和包含的标签…

以下 示例将删除空格和制表符并删除所有空行:

@If Exist "CODE_CHECK.txt" (For /F Delims^=^ EOL^= %%A In ('More /T1 "CODE_CHECK.txt"')Do @Set "$=%%A"&Call Echo(%%$: =%%)>"CODE_CHECK_2.txt"

要使用 保留任何空白行,您需要更多类似这样的东西:

@If Exist "CODE_CHECK.txt" (For /F "Tokens=1*Delims=]" %%A In ('More "CODE_CHECK.txt"^|Find /V /N ""')Do @Set "$= %%B"&Call Echo(%%$: =%%)>"CODE_CHECK_2.txt"

在这个例子中,我删除了 More/T1 选项,我不确定它的包含是否更有效或更不有效


您也可以为此使用 (如果需要,输入和输出文件可以相同):

(GC 'CODE_CHECK.txt') -Replace '\s',''|SC 'CODE_CHECK_2.txt'

您还可以 运行 来自 版本:

@PowerShell -NoP "(GC 'CODE_CHECK.txt') -Replace ' |\t',''|SC 'CODE_CHECK_2.txt'"

在这个版本中,我使用 ' |\t' 作为 '\s' 的可能替代方案。

鉴于文件包含少于 64K 行,每行长度小于 8K bytes/characters,空行不需要保留,文件 ASCII/ANSI-encoded 和 DOS/Windows-style换行符,您可以执行以下操作:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Write output to another file:
> "CODE_CHECK_2.txt" (
    rem /* Read file by `more` which replaces TABs by SPACEs;
    rem    then parse the output by `for /F` (skipping empty lines): */
    for /F delims^=^ eol^= %%L in ('more "CODE_CHECK.txt"') do (
        rem // Store current (non-empty) line:
        set "LINE=%%L"
        rem /* Toggle delayed expansion to be able to write and read
        rem    a variable in the same block of code and to preserve `!`: */
        setlocal EnableDelayedExpansion
        rem // Replace every SPACE by nothing, hence remove it:
        echo(!LINE: =!
        endlocal
    )
)
endlocal
exit /B

这是一种保留空行的方法(但其余限制仍然适用):

@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Write output to another file:
> "CODE_CHECK_2.txt" (
    rem /* Read file by `more` which replaces TABs by SPACEs;
    rem    precede every line by line number plus `:` to not appear empty;
    rem    then parse the output by `for /F` (which would skip empty lines): */
    for /F "delims=" %%L in ('more "CODE_CHECK.txt" ^| findstr /N "^"') do (
        rem // Store current line:
        set "LINE=%%L"
        rem /* Toggle delayed expansion to be able to write and read
        rem    a variable in the same block of code and to preserve `!`: */
        setlocal EnableDelayedExpansion
        rem // Replace every SPACE by nothing, hence remove it:
        set "LINE=!LINE: =!"
        rem // Remove line number prefix and return result:
        echo(!LINE:*:=!
        endlocal
    )
)
endlocal
exit /B