Batch file 从文本文件中删除空行
我想从文本文件中删除空行。我只是试图找到一个Batch file 从文本文件中删除空行,batch-file,Batch File,我想从文本文件中删除空行。我只是试图找到一个findstr命令行开关来找到解决方案,但我无法让它工作。这是我的档案: test2.html: <script src="common/latest_updates/angular-slider.js"></script> <script src="common/latest_updates//angular-list-group.js"></script> blank space <script
findstr
命令行开关来找到解决方案,但我无法让它工作。这是我的档案:
test2.html:
<script src="common/latest_updates/angular-slider.js"></script>
<script src="common/latest_updates//angular-list-group.js"></script>
blank space
<script src="common/latest_updates/jstree/jstree.js"></script>
<script src="common/latest_updates/jstree/ngJsTree.js"></script>
blank space
<script src="common/d3/ngFunnel.js"></script>
findstr /r /v "^$" test2.html >> test3.html
这将遍历源文件
test2.html
,只打印非空的行。结果将写入目标文件test3.html
@echo off
set "source=test2.html"
set "dest=test3.html"
1>"%dest%" (
for /f "tokens=1,* delims=:" %%i in ('findstr /n "^" "%source%"') do (
if not "%%j" == "" (
echo;%%j
)
)
)
为了处理空行(与只包含空格的行相同),将需要更多的处理,但应该可以在正确的时间打开和关闭延迟扩展
使用以下代码克服jeb提到的问题,能够处理行
:comment
或/?
。多亏了dbenham的回复
这将遍历源文件
test2.html
,只打印非空的行。结果将写入目标文件test3.html
@echo off
set "source=test2.html"
set "dest=test3.html"
1>"%dest%" (
for /f "tokens=1,* delims=:" %%i in ('findstr /n "^" "%source%"') do (
if not "%%j" == "" (
echo;%%j
)
)
)
为了处理空行(与只包含空格的行相同),将需要更多的处理,但应该可以在正确的时间打开和关闭延迟扩展
使用以下代码克服jeb提到的问题,能够处理行
:comment
或/?
。多亏了dbenham的回复
这将处理空行。您的帖子不清楚所示行是否包含空白。如果指示的行包含空格(如空格或制表符),则会变得更加复杂
@echo off
if exist test3.html del test3.html
for /f "tokens=1*" %%a in (Test2.html) do (
rem If adding a space to the line does not result in a line with only 1 space, output it.
if not "%%a "==" " (
echo %%a%%b>>test3.html
)
)
start "test" notepad.exe test3.html
exit /b
这将处理空行。您的帖子不清楚所示行是否包含空白。如果指示的行包含空格(如空格或制表符),则会变得更加复杂
@echo off
if exist test3.html del test3.html
for /f "tokens=1*" %%a in (Test2.html) do (
rem If adding a space to the line does not result in a line with only 1 space, output it.
if not "%%a "==" " (
echo %%a%%b>>test3.html
)
)
start "test" notepad.exe test3.html
exit /b
我看到两个可能的原因,为什么FINDSTR命令没有给出您想要的结果
- 空行可能不是空的,而是包含空格和/或制表符。显然,您的正则表达式与包含空格的行不匹配
- 该文件可能具有unix格式(行以
结尾,而不是Windows
标准)。
锚只匹配$
之前的位置,因此它永远无法匹配任何使用unix行结尾的行
表示硬编码的制表符,而不是字符串文字
findstr /rc:"[^ <tab>]" test2.html >test3.html
findstr/rc:“[^]”test2.html>test3.html
如果在控制台会话中启用了文件完成,则从命令行输入
可能会有点问题。按[TAB]键将尝试完成文件名。解决此问题的一种方法是按住[ALT]键和键盘[9]键,然后松开。输入行上可能会出现一个有趣的字符,但正确的
值将提供给FINDSTR
如果使用批处理脚本,那么输入字符应该没有问题,除非您的文本编辑器将制表符转换为空格。我发现FINDSTR命令没有给出所需结果的两个可能原因
- 空行可能不是空的,而是包含空格和/或制表符。显然,您的正则表达式与包含空格的行不匹配
- 该文件可能具有unix格式(行以
结尾,而不是Windows
标准)。
锚只匹配$
之前的位置,因此它永远无法匹配任何使用unix行结尾的行
表示硬编码的制表符,而不是字符串文字
findstr /rc:"[^ <tab>]" test2.html >test3.html
findstr/rc:“[^]”test2.html>test3.html
如果在控制台会话中启用了文件完成,则从命令行输入
可能会有点问题。按[TAB]键将尝试完成文件名。解决此问题的一种方法是按住[ALT]键和键盘[9]键,然后松开。输入行上可能会出现一个有趣的字符,但正确的
值将提供给FINDSTR
如果使用批处理脚本,则输入
字符应该没有问题,除非文本编辑器将制表符转换为空格。在源文件中出现行时失败,如:comment
或/?
@jeb谢谢您的评论。现在我终于明白了为什么echo(
比echo;
更受欢迎。我在DosTips上找不到更多关于这方面的详细信息。可以在源文件中的Fails中找到描述,如::comment
或/?
@jeb谢谢你的评论。现在我终于明白了echo的原因(
优先于echo;
。我在DosTips上找不到有关此的更多详细信息。说明可在%%找到。a
不能为空,因为在这种情况下/f已跳过。您的解决方案对于以;
开头的行失败,对于像on
或/?
“…对于以开头的行失败;对于像ON或/?这样的行失败”-这些行都不在原始post或示例数据中。%%a不能为空,因为在这种情况下/f已经跳过。对于以;
开头的行,解决方案失败;对于像ON或/?这样的行,解决方案失败。”…对于以开头的行失败;对于ON或/?”之类的行失败-这些行都不在原始post或样本数据中。findstr
的问题在哪里?findstr
的问题在哪里?这应该是可接受的答案。无需询问