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

Batch file 从.txt文件中删除所有空格、制表符,batch-file,tabs,spaces,powershell,Batch File,Tabs,Spaces,Powershell,我想删除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平台上,由于您提供的代码和包含的标记 以下示例将删除空

我想删除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平台上,由于您提供的代码和包含的标记

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

@如果存在“code\u CHECK.txt”(For/F Delims^=^EOL^=%%A In('More/T1“code\u CHECK.txt”)则执行@Set“$=%%A”并调用Echo(%%$:=%%)>“code\u CHECK\u 2.txt”
要使用维护任何空行,您需要类似以下内容:

@如果存在“code\u CHECK.txt”(对于/F“Tokens=1*Delims=]”中的%%A('More“code\u CHECK.txt”^ | Find/V/N”“),则执行@Set“$=%%B”&调用Echo(%%$:=%%)>“code\u CHECK\u 2.txt”
在本例中,我删除了
/T1
选项,用于
更多
,我不确定它的包含是否更有效


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

(GC'code_CHECK.txt')-替换'\s',''SC'code_CHECK_2.txt'
您还可以从以下位置运行该版本:

@PowerShell-NoP“(GC'code_CHECK.txt')-替换“|\t”,“SC'code_CHECK_2.txt”

在这个版本中,我使用了
'|\t'
,作为
'\s'

的一个可能的替代方案。如果文件包含的行数少于64K,且每行长度少于8K字节/字符,则不需要保留空行,并且该文件使用DOS/Windows样式的换行符进行ASCII/ANSI编码,您可以执行以下操作:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//将输出写入另一个文件:
>“代码检查2.txt”(
rem/*通过“more”读取文件,用空格替换制表符;
rem然后通过'for/F'(跳过空行)解析输出:*/
对于/F delims^=^eol^=%%L in('more“CODE\u CHECK.txt“'),请执行以下操作(
rem//存储当前(非空)行:
设置“行=%%L”
rem/*切换延迟扩展以能够写入和读取
rem同一代码块中的变量并保留“!”:*/
setlocal EnableDelayedExpansion
rem//不使用任何内容替换每个空间,因此将其删除:
回音(!行:=!
端部
)
)
端部
退出/B

以下是一种保留空行的方法(尽管其余限制仍然适用):

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//将输出写入另一个文件:
>“代码检查2.txt”(
rem/*通过“more”读取文件,用空格替换制表符;
rem在每一行前面加上行号加上“:”,不显示为空;
rem然后通过'for/F'解析输出(这将跳过空行):*/
对于/F“delims=“%%L in('more”CODE_CHECK.txt“^ | findstr/N“^”)do(
rem//存储当前行:
设置“行=%%L”
rem/*切换延迟扩展以能够写入和读取
rem同一代码块中的变量并保留“!”:*/
setlocal EnableDelayedExpansion
rem//不使用任何内容替换每个空间,因此将其删除:
设置“行=!行:=!”
rem//删除行号前缀并返回结果:
回音(!行::=!
端部
)
)
端部
退出/B

您有两个问题。第一,代码没有将更改的变量输出到输出文件。第二,您需要使用delayed expansion.cat code_CHECK.txt | sed的/[:space:]//g'>>CODE\u CHECK\u 2.txt这对我来说很有效!@RaitisLebedevs哈?这是windows批处理文件,不是bash…你是怎么把它们混在一起的?投票结束这个主题,因为不清楚。在从文本文件中删除所有普通空格和水平制表符方面,一切都比windows命令处理器好。所以我建议考虑使用预安装d VBScript、JScript、PowerShell或类似Python、Perl或任何文本编辑器的替代程序。但是,如果您想使用最不适合此任务的应用程序执行此操作,则需要在
set“one=%%a”
之后启用,然后在
set“one=!one:=!”
set“one=!one:TAB=!”
echo上使用(!one!
然后在循环中禁用next。有关启用和禁用延迟扩展所需的SETLOCAL和ENDLOCAL命令的详细信息,请阅读。在for循环之前,使用
SETLOCAL EnableDelayedExpansion
仅启用一次,在for循环之后,使用
ENDLOCAL
仅禁用一次,将导致l损坏文本文件中包含一行或多行
的行
设置“one=%%a”
。此外,FOR循环完全忽略空行和以
开头的行。