Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/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 通过windows批处理文件将一个字符串附加到另一个字符串之后的文件中_String_Windows_File_Batch File_Append - Fatal编程技术网

String 通过windows批处理文件将一个字符串附加到另一个字符串之后的文件中

String 通过windows批处理文件将一个字符串附加到另一个字符串之后的文件中,string,windows,file,batch-file,append,String,Windows,File,Batch File,Append,我正在尝试编写一个批处理文件,以便在文件中尚未出现某个字符串“str2=>bbb”时将其附加到文件中。“str2”将在字符串“str1=>aaa”之后(该字符串始终存在于文件中)。例如: file.txt str1=>aaa 文件结尾.txt 它将成为: file.txt str1=>aaa str2=>bbb 文件结尾.txt 并且批处理文件必须是非破坏性的,即如果文件中已经存在“str2”,批处理将不执行任何操作 我知道如何在文件中查找字符串: FINDSTR "str2 =&g

我正在尝试编写一个批处理文件,以便在文件中尚未出现某个字符串“str2=>bbb”时将其附加到文件中。“str2”将在字符串“str1=>aaa”之后(该字符串始终存在于文件中)。例如:

file.txt

str1=>aaa

文件结尾.txt

它将成为:

file.txt

str1=>aaa

str2=>bbb

文件结尾.txt

并且批处理文件必须是非破坏性的,即如果文件中已经存在“str2”,批处理将不执行任何操作

我知道如何在文件中查找字符串:

FINDSTR "str2 => bbb" "file.txt"

IF %errorlevel%==0 (
    ECHO FOUND
) 

但是我不知道还需要做什么才能在下一行中写入另一个字符串。

在批处理文件中使用powershell来简化操作

    FINDSTR "str2 => bbb" "file.txt"

    IF %errorlevel%==0 (
        ECHO FOUND
        Goto END
    )
    powershell -Command "(get-content File.txt) -replace "str1 => aaa", "$&`n str2 => bbb" | set-content File.txt"
:end

powershell命令将获取文件的内容,并将字符串替换为搜索字符串($&)+新行+str2…

由于我不清楚str2是否必须在文件中的
str1
之后立即出现,或者在任何地方出现,因此我编写了以下脚本,该脚本能够涵盖这两个标准。它会直接修改输入文件以防万一,所以要小心。输入文件必须指定为命令行参数:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“FILE=%~1”&rem//(输入文件;`%~1`取第一个命令行参数)
设置“WORD1=str1”&rem//(word之后必须插入“%WORD2%”)
设置“WORD2=str2”&rem/(文件中必须存在的单词)
设置“STRING2=%WORD2%=>bbb”&rem//(如果缺少“%WORD2%”,则插入完整字符串)
设置“分隔符==”&rem//(将单词与其他单词分隔开的字符)
设置“FIXEDPOS=#”&rem//(如果不为空,则定义“%WORD2%”必须在“%WORD1%”之后)
rem//创建换行符(回车和换行):
(对于/F%%#in('copy/Z“%~f0“nul”)do set^“CR+LF=%#^
%=空行=%
^")
rem//确保分离器列表包含(末端)和空间:
如果定义了分隔符(
如果不是“%SEPARATORS:~-1%”==“set”分隔符==分隔符:=%
)否则设置“分隔符=”
setlocal EnableDelayedExpansion
rem//设置正则表达式:
如果定义了FIXEDPOS(
rem/*`%WORD2%`必须在`%WORD1%`后面的行中,因此请定义一个双线
rem正则表达式(两个单词必须出现在行首):*/
设置“REGEX=^%WORD1%[%SEPARATORS%].*!CR+LF!%WORD2%[%SEPARATORS%]”
)否则(
“%WORD2%”的rem/*位置与“%WORD1%”无关,
因此,它必须仅出现在一行的开头:*/
设置“正则表达式=^%WORD2%[%SEPARATORS%]”
)
rem//在文件中搜索正则表达式:
>nul findstr/I/R/C:“!REGEX!”“%FILE%”(
rem//未遇到匹配项,因此请读取整个文件,然后将其耗尽:
对于/F“delims=“%%L in('findstr/N/R“^”“%FILE%”^&^>“%FILE%”中断)执行以下操作(
端部
rem//读取定义是否插入字符串的行重置标志:
set“FLAG=“&set”行=%%L”
setlocal EnableDelayedExpansion
rem//拆分第一个单词并与“%WORD1%”进行比较:
对于(“!LINE::=!”)中的/F“eol=tokens=1 delims=%SEPARATORS%”%%K,请执行以下操作(
端部
rem//第一个单词与“%WORD1%”匹配,因此设置标志:
如果/I“%%K”=%WORD1%“设置”标志=#”
setlocal EnableDelayedExpansion
)
rem//附加到文件:
>>%FILE%(
rem//写入原始行:
回音(!行::=!
rem//在定义了标记的情况下写入要插入的字符串:
如果已定义标志echo(!STRING2!
)
)
)
端部
端部
退出/B

注意,这个脚本不检查<代码> STR1是否发生多次。

您可能需要考虑自己通过文本文件,检查您所得到的行是否正确(<代码> AAA < /代码>)然后将其写入临时文件。如果您得到的行是正确的,您将在该行之后写入
bbb
。最后删除旧行并重命名临时行。仅当字符串位于单独的行tho中且效率不高时才有效。