长春网站建设解决方案,网站模板手机,网站服务器配置参考指南,做网站需要多少人如题#xff0c;在for中进行一些细化操作时发现SET变量一直不成功(尤其在读取文件时) 简单搜了下看到有个帖子(BAT求助与讨论-SET变量失效)是讨论这个问题的#xff0c;然后有个老哥给出的解答#xff0c;其中使用了使用CALL#xff0c;这让我想起几天前看到的一个博客… 如题在for中进行一些细化操作时发现SET变量一直不成功(尤其在读取文件时) 简单搜了下看到有个帖子(BAT求助与讨论-SET变量失效)是讨论这个问题的然后有个老哥给出的解答其中使用了使用CALL这让我想起几天前看到的一个博客(批处理获取当前目录名称(非完整路径))也是用了CALL只能说CALLgoto这俩命令是真的伟大(不少疑难杂症要通过这个方式绕开)同时也深深感叹Win的命令行工具写的跟坨苟石一样。 然后在处理“for命令读取文本时跳过空行的问题”时又看到了一个帖子(BAT求助与讨论-for命令不遗漏空行)(又是同个域名-批处理之家)给出了答案其中用的是setlocal enabledelayedexpansion和endlocal至于这俩命令的作用我也不是很关心我这里就主要以CALLgoto的搭配编写脚本。 CMD/BAT脚本代码
无效代码
echo off
rem 这个脚本无法成功SET变量导致无法进一步操作
for /f delims %%i in (%0) do (SET val%%iecho.%val%
)有效代码-【CALLgoto】
echo off
chcp 65001
for /f delims %%i in (%0) do (call :DoSth %%i
)
goto :eof:DoSth
rem 将头尾的引号去除以获取行数据
SET row%1
SET row%row:~1,-1%
echo %row%
有效代码-【setlocal enabledelayedexpansionendlocal】
echo off
chcp 65001for /f delims %%i in (findstr /n .* %0) do (set str%%isetlocal enabledelayedexpansionset str!str:*:!echo,!str!endlocal
)实际运用场景
例如要逐行读取文本文件(往往是各种参数配置或者是其他)并进行一些细化操作。
当然实际上可以自己写一些C/C代码编译成exe程序供实际生产环境使用不少时候是这么做的自己花个把小时造的小轮子远比在BAT原生命令里苦苦寻找可行性操作要来得实际例如我以前写的一个可通过命令行进行键鼠控制的小轮子(github)CPP_Mouse_Keyboard这在原生命令行里是想都不敢想的操作(因为根本就没这样的命令) bat命令是真的太令人感到悲哀它的功能如此受限以至于不时怀疑这玩意儿到底还能干些啥 读取脚本开头的注释内容
rem 解决for语句中set变量失效的问题https://blog.csdn.net/weixin_44733774/article/details/134774369
rem 逐行获取文件内容https://www.cnblogs.com/gered/p/10682741.html#autoid-2-0-0
rem 字符串截取替换https://zhuanlan.zhihu.com/p/421422830
rem for命令不遗漏空行http://www.bathome.net/thread-9174-1-1.html
rem SET变量判空https://blog.csdn.net/weixin_44733774/article/details/134774852echo off
chcp 65001rem flag等效于循环语句的break。flag为0时后面的文本不作处理
SET flag1
for /f delims %%i in (findstr /n .* %0) do (call :ReadRow %%i)
goto :eof:ReadRow
if %flag%0 (goto :eof)
SET row%1
SET row%row:~1,-1%
SET row%row:*:%
call :EmptyTest %row%
goto :eof:EmptyTest
if %1 ( echo. goto :eof
) if %row:~,2%:: (SET row%row:~2%goto :PrintRow
)
if %row:~,4%rem (SET row%row:~4%goto :PrintRow
)
SET /A flag0
goto :eof:PrintRow
echo %row% 参考
BAT求助与讨论-SET变量失效http://www.bathome.net/thread-55988-1-1.htmlBAT求助与讨论-for命令不遗漏空行http://www.bathome.net/thread-9174-1-1.html 未经个人同意不得私自转载本文发布于CSDNhttps://blog.csdn.net/weixin_44733774/article/details/134774369