String 使用批处理脚本处理字符串
我目前正在创建一个批处理脚本,它必须循环文件中的行,检查一些字符串,如果有匹配前缀,则该字符串带有“#”(注释掉) 我是批处理脚本的新手,到目前为止我只知道:String 使用批处理脚本处理字符串,string,file-io,batch-file,String,File Io,Batch File,我目前正在创建一个批处理脚本,它必须循环文件中的行,检查一些字符串,如果有匹配前缀,则该字符串带有“#”(注释掉) 我是批处理脚本的新手,到目前为止我只知道: for /f %%j in (CMakeLists.txt) do ( if "%%j"=="Extensions_AntTweakBar" ( echo lol1 ) if "%%j"=="Extensions_Inspection" ( echo lol2 ) i
for /f %%j in (CMakeLists.txt) do (
if "%%j"=="Extensions_AntTweakBar" (
echo lol1
)
if "%%j"=="Extensions_Inspection" (
echo lol2
)
if "%%j"=="Extensions_InspectionBar" (
echo lol3
)
)
所以我现在的问题是,我不知道如何在批处理脚本中对字符串进行操作。如果有人能帮助我,我将不胜感激:)如果不更好地了解循环中的内容或CMakeLists.txt文件的外观,请尝试以下内容:
FINDSTR "SOMETHING" %%J && ECHO #%%J || ECHO %%J
&&使第二个命令(ECHO)以第一个命令不带错误状态退出为条件,而| |类似于逻辑OR,当第一个命令不带错误状态时运行
实际上,要修改文本文件的内部结构,您可能最好使用或-win32二进制文件可以在项目中找到。您可以只使用要附加的文本,然后通常使用变量
C:\>set MY_VAR=Hello world!
C:\>echo #%MY_VAR%
#Hello world!
C:\>set MY_VAR=#%MY_VAR%
C:\>echo %MY_VAR%
#Hello world!
如果你只是在做echo,没关系<代码>回音#%%j将执行您需要的操作
但是,如果要将行设置为变量,则必须。将setlocal ENABLEDELAYEDEXPANSION
添加到文件顶部,然后用包围变量代码>而不是%
。例如(请注意,我添加了delims=
,将整行放在%%j
中,而不是第一个单词):
给定此输入文件:
Extensions AntTweakBar
some text
Extensions Inspection
Extensions What?
some more text
Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text
上述脚本生成此输出:
C:\>comment.bat
#Extensions AntTweakBar
some text
#Extensions Inspection
Extensions What?
some more text
#Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text
当然,删除@echo off
将有助于调试问题
尽管如此,批处理字符串处理所能完成的工作已经达到极限。如果仍要使用批处理命令,可能需要开始将行写入临时文件,并使用正则表达式使用findstr
。可以在bat中完成。。。但是你为什么选择它呢?这可以很容易地在普通的老DOS中实现。我已经做了1000次了,如果不是更多的话。今晚我将回到这个问题上来——圣诞节就要到了!您能提供一个示例文件,以便我们查看是否有任何需要保留的文本格式,即空行、缩进等。。。或者你能肯定地说这不是我们需要关注的问题吗?我知道这一点,但问题是,我不能依赖sed或awk,否则这将是正确的做法我用更多的代码更新了main,这似乎很有效,它现在找到了3行重要的代码,但是我如何在它们前面加上“#”?@Skeen-你能依赖于PowerShell或更能处理文本的东西吗?这几乎就是我现在正在做的,我自己修复了:)-但是+1:)
C:\>comment.bat
#Extensions AntTweakBar
some text
#Extensions Inspection
Extensions What?
some more text
#Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text