批处理文件 – 具有FIND.exe的DOS批处理FOR循环是否剥离空行?
发布时间:2020-12-14 01:40:52 所属栏目:Windows 来源:网络整理
导读:即使我使用TYPE.exe命令来转换文件以确保该文件是ASCII文件,以使FIND命令与文件兼容,该DOS批处理脚本将剥离空行并且不显示文件中的空白行.任何人都可以告诉我如何使这个脚本包含空白行? @ECHO offFOR /F "USEBACKQ tokens=*" %%A IN (`TYPE.exe "build.prop
即使我使用TYPE.exe命令来转换文件以确保该文件是ASCII文件,以使FIND命令与文件兼容,该DOS批处理脚本将剥离空行并且不显示文件中的空白行.任何人都可以告诉我如何使这个脚本包含空白行?
@ECHO off FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE.exe "build.properties" ^| FIND.exe /V ""`) DO ( ECHO --%%A-- ) pause
这是FOR / F的设计行为 – 它不会返回空行.周围的工作是使用FIND或FINDSTR在行号前面加上行号.如果您可以保证行行分隔符不会开始,那么您只需设置适当的分隔符并保持令牌1 *,但仅使用第二个令牌.
::preserve blank lines using FIND,assume no line starts with ] ::long lines are truncated for /f "tokens=1* delims=]" %%A in ('type "file.txt" ^| find /n /v ""') do echo %%B ::preserve blank lines using FINDSTR,assume no line starts with : ::long lines > 8191 bytes are lost for /f "tokens=1* delims=:" %%A in ('type "file.txt" ^| findstr /n "^"') do echo %%B ::FINDSTR variant that preserves long lines type "file.txt" > "file.txt.tmp" for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "file.txt.tmp"') do echo %%B del "file.txt.tmp" 我更喜欢FINDSTR – 它更可靠.例如,FIND可以截断长行 – FINDSTR不会直接从文件读取. FINDSTR通过管道或重定向从stdin读取时会丢弃长行. 如果文件可能包含以分隔符开头的行,那么您需要使用行号前缀保留整行,然后使用搜索和替换来删除行前缀.将%% A传输到环境变量时,您可能希望延迟扩展,否则任何!会被破坏但是在循环中,您需要延迟扩展才能进行搜索和替换. ::preserve blank lines using FIND,even if a line may start with ] ::long lines are truncated for /f "delims=" %%A in ('type "file.txt" ^| find /n /v ""') do ( set "ln=%%A" setlocal enableDelayedExpansion set "ln=!ln:*]=!" echo(!ln! endlocal ) ::preserve blank lines using FINDSTR,even if a line may start with : ::long lines >8191 bytes are truncated for /f "delims=*" %%A in ('type "file.txt" ^| findstr /n "^"') do ( set "ln=%%A" setlocal enableDelayedExpansion set "ln=!ln:*:=!" echo(!ln! endlocal ) ::FINDSTR variant that preserves long lines type "file.txt" >"file.txt.tmp" for /f "delims=*" %%A in ('findstr /n "^" "file.txt.tmp"') do ( set "ln=%%A" setlocal enableDelayedExpansion set "ln=!ln:*:=!" echo(!ln! endlocal ) del "file.txt.tmp" 如果您不需要担心将文件转换为ASCII文件,则删除管道更有效,并使FIND或FINDSTR打开指定为参数的文件,或通过重定向. 在读取过程中,还有另外一个工作完全绕过FOR / F.看起来很奇怪,但效率更高.使用延迟扩展没有限制,但不幸的是有其他限制. 1)行必须由< CR>< LF>终止(如果您进行TYPE文件转换,这不会是一个问题) 2)行必须为< = 1021字节长(忽略< CR< LF>) 3)任何拖尾控制字符从每一行剥离. 4)它必须从文件中读取 – 您不能使用管道.所以在您的情况下,您将需要使用临时文件来进行ASCII转换. setlocal enableDelayedExpansion type "file.txt">"file.txt.tmp" for /f %%N in ('find /c /v "" ^<"file.txt.tmp"') do set cnt=%%N <"file.txt.tmp" ( for /l %%N in (1 1 %cnt%) do( set "ln=" set /p "ln=" echo(!ln! ) ) del "file.txt.tmp" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 由于iSCSI连接导致Windows重新启动时间过长
- 如何使Emacs dired模式在Windows中显示unicode字符?
- 在没有Windows的情况下在DL380 G5上刷新BIOS
- .net – 无法加载Exchange powershell管理单元:“Microsof
- 如何枚举另一个用户会话的打开窗口(~EnumWindows)
- msbuild – 为什么我的.wpp.targets文件不能应用在我的构建
- iis – 使用401的Kerberos身份验证失败
- ExtJs面板 – 添加动态组件
- Microsoft SQL Count问题
- TypeScript编译器在Windows上使用什么JavaScript引擎?
推荐文章
站长推荐
热点阅读