TA的每日心情 | 无聊 9 小时前 |
---|
签到天数: 728 天 [LV.9]以坛为家II
至尊会员
   
- 积分
- 161638
|
本帖最后由 Yukarubih 于 2023-2-19 23:19 编辑
大佬,你的 call 命令太帅了!
看了代码之后,我有几个关于命令的疑问想要请教:
- 批处理:
- call :processing
- if !ERRORLEVEL! EQU 0
- goto end
- exit /b 1
- exit /b 0
- powershell:
- powershell -Command
复制代码
首先是 call,因为看了批处理之家的某帖子,之后在「一日一教学」中导致我跳过了这个命令。
call :processing
if !ERRORLEVEL! EQU 0 (
这里,call 之后为什么使用 %errorlevel% 检查返回码?难道 call 执行后也有返回码吗?还是在检查 call 调用的内部函数是否执行成功的返回码?
goto end
我对他的了解也只有“跳转的印象”,借此机会想彻底摸清他的使用方法&注意点。
exit /b
「一日一教学」中说 exit /b 是用来退出子函数的,但没有提及这样的用法“exit /b 1/exit /b 0”。
-------------------------
我所使用的命令大多是简单的 for,但是在看完大佬的代码之后,发现 call 更加简洁方便。
完全可以提前设置一堆函数丢到脚本底部,然后根据需要 call→call→call→call→call。
直接看前面的几行 call 命令就可以了解大体的处理流程。
所以才想走捷径,请教大佬您长期累积下来的使用经验&心得。
(call 和 for 一起使用的注意点)
-------------------------
因为我完全不会写脚本代码,能够写脚本都是基于我把查到的命令全部注释化并制作成示例脚本,
累积下来,需要什么功能就提取哪个示例的代码,所以离开注释后就完全无法调用代码了。
示例 (添加拒绝写入权限):
icacls "C:\Program Files (x86)\Tencent\TGuard" /deny Everyone:W /T
rem icacls:权限操作。/deny Everyone:W:添加拒绝写入的权限;/deny 拒绝,Everyone 所有用户,W 写入权限,/T 此文件夹、子文件夹、文件。
这里上传一个 ImageMagick 图片转换的脚本,让大佬了解一下小白注释风格的脚本。
(注释来源于当时的主观感受和网络资料,不一定准确)
(当时找不到完美的 avif 转换工具,发现 ImageMagick 之后就研究命令行参数制作了这个脚本)
ImageMagick 批量转换图片.rar
(16.02 KB, 下载次数: 12)
———————————————————————
最后是 powershell -Command 命令
由于我没有收集 powershell 的实例,所以无法解读命令。
(每个字符都读不懂,就看懂了常用的 -Encoding utf8 “输出文件编码为 utf-8”)
- powershell -Command "$t=[Management.Automation.WildcardPattern]::Escape("!fileFullPath!"); (gc -Raw $t) -creplace '%removeTagsPattern%', ',' -creplace '(?s)%removeSectionPattern%', '' | Out-File $t -Encoding utf8"
复制代码
不过这些都不重要,
重要的是不借助第三方工具只用批处理完成「正则替换文件内容」。
目前我是借助 wfr (wide find - replace)、EmEditor 这些第三方工具来替换文件内容。
但是在一些简单的场景也要调用第三方工具很是不方便,放到笔记本上用还需打包程序才能让批处理正常运行。
所以希望大佬解释一下这条命令,尽量每个字符都写上注释。
(感激涕零。因为在批处理里每个符号都有作用,像 "&、|..." )
- rem "%EmEditor%" "%PotPlayer%" /fc "\[RememberFiles\](\r\n|\r|\n)([0-9]+=.*(\r\n|\r|\n))+" /x /rw "\[RememberFiles\]\r\n" /bk "%EmEditor备份目录%"
- "%EmEditor%" "%PotPlayer%" /fc "\[RememberFiles\](\r\n|\r|\n)([0-9]+=.*(\r\n|\r|\n))+" /x /rw "\[RememberFiles\]\r\n"
- if %errorlevel% == 0 (echo,返回码:%errorlevel%,匹配成功> nul) else (echo,返回码:%errorlevel%(匹配失败,请排查!)&color 4&echo,&pause&exit)
- rem EmEditor:正则替换,虽然程序内匹配多行必须开启"循环"+"搜索正则附加行",但是命令行默认支持匹配多行模式。
- (完美解决了 wfr 不支持 Utf-8 特殊字符、韩语字的问题)
- rem /rc:打开文件并执行替换 (显示窗口,不保存)。/fc:在文件中查找 (不显示窗口,直接替换退出),区分大小写。
- /x:启用正则表达式。/rw:指定替换的字符串。/bk "BackupFolder":指定一个备份文件夹当在文件中替换时。
- /fu "_*;*.bak":忽略 "_*;*.bak" 文件。
- rem /cp 65536:系统默认编码,Unicode编码吗?,(65537:UTF-16LE、65001:UTF-8)。
- /cp Encoding:设定一个用来打开的编码,数值组合:131072 检测 Unicode 签名 (BOM)、262144 检测 UTF-8、
- 524288 检测 HTML/XML 字符集、1048576 检测所有编码。
-
- rem 程序内的配置文件“eeCommon.ini”
- rem FindFlag=0x0000000000000181:开启循环(匹配多行,其他如"显示匹配数", "仅在选择区匹配"的开关也在这条参数内) rem LinesSearch=100:多行匹配的行数限制,搜索正则表达式的附加行(L),设置为100,就只能匹配满足正则的100行,值越大需要耗费的时间越长。
复制代码
大佬若是不方便也没事,以后我再慢慢查询,慢慢精进。
(遇见大佬不容易,不能放过提问机会)
|
|