Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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/2/batch-file/6.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
Windows 使用批处理脚本查找替换变量文本的整个字符串行_Windows_Batch File_Cmd - Fatal编程技术网

Windows 使用批处理脚本查找替换变量文本的整个字符串行

Windows 使用批处理脚本查找替换变量文本的整个字符串行,windows,batch-file,cmd,Windows,Batch File,Cmd,处理将修改package.json文件的批处理脚本 基本上,我需要替换每个json文件的“test”部分 这是一个示例代码段: "scripts": { "test": "any text can go here" }, 我要做的是将整个“测试”行替换为: "test": "jest --coverage" 我只想出了一个脚本来替换字符串(没有空格): 有人能帮我修改一下吗 -它可以容纳带有空格的字符串 -它可以用“test”替换整行,因为“任何文本都可以放在这里”值总是不同

处理将修改package.json文件的批处理脚本

基本上,我需要替换每个json文件的
“test”
部分

这是一个示例代码段:

  "scripts": {
    "test": "any text can go here"
  },
我要做的是将整个“测试”行替换为:

"test": "jest --coverage"
我只想出了一个脚本来替换字符串(没有空格):

有人能帮我修改一下吗 -它可以容纳带有空格的字符串 -它可以用
“test”
替换整行,因为
“任何文本都可以放在这里”
值总是不同的


但请注意,我不能使用任何其他程序/命令,如sed或fnr.bat或其他

正如Compo已经评论的那样,批处理不是适合该作业的工具,但是当您不能使用任何其他工具(如PowerShell)时:

它保留格式和空行,但在某些有毒字符方面存在一些问题
(这就是为什么
2>nul
;尽管输出正常)

对于编辑文件,不要选择
cmd.exe
命令,而是使用
powershell.exe
及其
ConvertFrom Json
ConvertTo Json
功能。正如Compo已经说过的那样,批处理(cmd.exe)对于操作文本文件来说非常糟糕。您可以使用来轻松可靠地完成任务-
jrepl“test”“replacement text”/l/b/e/f“temp.txt”/o-
@dbenham:OP不想替换
test
,但之后会替换未知字符串。(毫无疑问,
jrepl
也能做到这一点)
SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%a in (temp.txt) do (
    SET s=%%a
    SET s=!s:test=newText!
    echo !s!>>yourtempfilename.txt
)
pause
@echo off
setlocal disabledelayedexpansion
set "newtext=some other text here"
(for /f "tokens=1* delims=]" %%a in ('find /n /v "" temp.txt') do (
  echo %%b|findstr /rc:"\ *\"test\":\ \".*\"" >nul && (
    for /f "delims=:" %%c in ("%%b") do echo %%c: "%newtext%"
    ) || echo/%%b
))>yourtempfilename.txt 2>nul