Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用批处理脚本处理字符串_String_File Io_Batch File - Fatal编程技术网

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