在 CMD 中添加空格以选择字符串时加入行不起作用
Posted
技术标签:
【中文标题】在 CMD 中添加空格以选择字符串时加入行不起作用【英文标题】:joining lines while adding white-spaces to select strings in CMD is not working 【发布时间】:2020-04-21 19:19:00 【问题描述】:我的测试字符串是:
this is a sentence.
google.com
here is another sentence.
microsoft.com
this sentence has no period
我的代码是:
@echo off
setlocal EnableDelayedExpansion
set row=
@((For /F "EOL=|Delims=" %%# In ('^""%__AppDir__%find.exe" "."^<"%UserProfile%\i.txt"^"')Do @Set /P "=%%# "<NUL)&Echo()>"%UserProfile%\o.txt"
echo %row% >%userprofile%\o.txt
echo %row%
C:\Users\qwerp>joint3
ECHO is off.
我期待得到:
google.com microsoft.com
我得到了:
ECHO is off.
我做错了什么?
【问题讨论】:
@Compo 这不是你的想法吗?for
循环后面的行应该是set /p "row="<%userprofile%\o.txt
("将for
循环生成的文本文件读入一个变量") 而不是echo %row% >...
("写( empty) 文件的变量,覆盖它以前的内容")
不,@Elisha,尤其是因为我在之前的回答中为您提供的单行代码是整个批处理文件,您毫无理由地在其上方和下方添加了行。至于您更改的参数,您可以简单地将find.exe
替换为findstr.exe
,显然会相应地更改匹配选项。有关包含该更改的完整脚本,请参阅下面的答案。
这是线程Remove all lines which do not contain a period的后续,对吗?
@aschipfl 不完全是。这是一个线程中出现的新问题。但是由于我的第一个问题的答案在线程中(而不是在发布的答案中)并且我的新问题的答案出现在线程中(这是发布的答案)不是原始问题的答案是看到它在同一个线程中仲裁新问题是不公平的。在这里,我的新问题的答案得到了澄清,令我满意。
【参考方案1】:
鉴于您的示例文件内容更改和声明的意图,这可能足以满足您的需求,只需将 find.exe
更改为 findstr.exe
,(使用适当的选项):
@((For /F "EOL=|Delims=" %%# In ('^""%__AppDir__%findstr.exe" "\." "%UserProfile%\i.txt"^|"%__AppDir__%findstr.exe" "[^\.]$"^"')Do @Set /P "=%%# "<NUL)&Echo()>"%UserProfile%\o.txt"
【讨论】:
以上是关于在 CMD 中添加空格以选择字符串时加入行不起作用的主要内容,如果未能解决你的问题,请参考以下文章