Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/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
Batch file 将sed替换规则转换为批处理/windows_Batch File_Sed - Fatal编程技术网

Batch file 将sed替换规则转换为批处理/windows

Batch file 将sed替换规则转换为批处理/windows,batch-file,sed,Batch File,Sed,我试图用批处理文件中提供的版本号替换bower文件中的版本号。在*nix中,我可以使用“sed”,这将很容易,并且可以按如下方式完成: sed -i -e "s/\(\"version\":\).*/\1\"$RELEASE_NUMBER\",/" bower.json 它搜索版本:并用RELEASE_NUMBER变量(加上“,”)替换其后面的零件。然而,我似乎无法在批处理中使用 for /f .. in bower.json .. 一种设置。我无法使用cygwin,因此我必须将sed转换为

我试图用批处理文件中提供的版本号替换bower文件中的版本号。在*nix中,我可以使用“sed”,这将很容易,并且可以按如下方式完成:

sed -i -e "s/\(\"version\":\).*/\1\"$RELEASE_NUMBER\",/" bower.json
它搜索版本:并用RELEASE_NUMBER变量(加上“,”)替换其后面的零件。然而,我似乎无法在批处理中使用

for /f .. in bower.json ..

一种设置。我无法使用cygwin,因此我必须将sed转换为windows可运行代码。

最接近于一行程序而不需要非本机实用程序的方法是使用PowerShell的
replace
方法

设置“版本号=4.8”
powershell“(gc bower.json)-替换“(\“version\”:\s*)[^,]+”,“$1\%RELEASE\u NUMBER%\””,删除文件bower.json”
但是,将结构化数据(如JSON、XML、HTML等)作为复杂的平面文本进行抓取和处理总是让我感到畏缩。如果JSON被缩小了呢?如果我是你,我会将JSON解析为JSON,并将其作为对象进行操作。这需要更多的努力,但更安全。使用.bat扩展名保存此文件

@如果(@code节==@Batch)@那么
@echo off和setlocal
设置“版本号=4.8”
设置“JSONfile=bower.json”
cscript/nologo/e:Jscript“%~f0”“%RELEASE\u NUMBER%”“%JSONfile%”
后藤:EOF
@结束//结束批处理/开始JScript混合嵌合体
var fso=WSH.CreateObject('scripting.filesystemobject'),
htmlfile=WSH.CreateObject('htmlfile'),
args={'version':WSH.Arguments(0),'file':WSH.Arguments(1)},
fHandle=fso.OpenTextFile(args.file,1);
//从htmlfile COM对象导入JSON方法
htmlfile.write(“”);
var JSON=htmlfile.parentWindow.JSON;
var struct=JSON.parse(fHandle.ReadAll());
struct.version=args.version;
fHandle.Close();
fHandle=fso.CreateTextFile(args.file,true);
write(JSON.stringify(struct,null,“\t”);
fHandle.Close();
您可能需要修改
struct.version=args.version
行,具体取决于JSON的层次结构(即
struct.childName[0].grant.version=args.version
)。如果无法预测
“version”
键的位置,可以使用递归函数搜索并修改它:

函数findKey(干草堆、针){
for(草堆中的变量i){
如果(针==i)返回草垛;
否则如果(key=findKey(haystack[i],针))返回键;
}
}
var struct=JSON.parse(fHandle.ReadAll());
findKey(结构,“版本”).version=args.version;

在不需要非本机实用程序的情况下,最接近单行程序的方法是使用PowerShell的
replace
方法

设置“版本号=4.8”
powershell“(gc bower.json)-替换“(\“version\”:\s*)[^,]+”,“$1\%RELEASE\u NUMBER%\””,删除文件bower.json”
但是,将结构化数据(如JSON、XML、HTML等)作为复杂的平面文本进行抓取和处理总是让我感到畏缩。如果JSON被缩小了呢?如果我是你,我会将JSON解析为JSON,并将其作为对象进行操作。这需要更多的努力,但更安全。使用.bat扩展名保存此文件

@如果(@code节==@Batch)@那么
@echo off和setlocal
设置“版本号=4.8”
设置“JSONfile=bower.json”
cscript/nologo/e:Jscript“%~f0”“%RELEASE\u NUMBER%”“%JSONfile%”
后藤:EOF
@结束//结束批处理/开始JScript混合嵌合体
var fso=WSH.CreateObject('scripting.filesystemobject'),
htmlfile=WSH.CreateObject('htmlfile'),
args={'version':WSH.Arguments(0),'file':WSH.Arguments(1)},
fHandle=fso.OpenTextFile(args.file,1);
//从htmlfile COM对象导入JSON方法
htmlfile.write(“”);
var JSON=htmlfile.parentWindow.JSON;
var struct=JSON.parse(fHandle.ReadAll());
struct.version=args.version;
fHandle.Close();
fHandle=fso.CreateTextFile(args.file,true);
write(JSON.stringify(struct,null,“\t”);
fHandle.Close();
您可能需要修改
struct.version=args.version
行,具体取决于JSON的层次结构(即
struct.childName[0].grant.version=args.version
)。如果无法预测
“version”
键的位置,可以使用递归函数搜索并修改它:

函数findKey(干草堆、针){
for(草堆中的变量i){
如果(针==i)返回草垛;
否则如果(key=findKey(haystack[i],针))返回键;
}
}
var struct=JSON.parse(fHandle.ReadAll());
findKey(结构,“版本”).version=args.version;

为什么不能使用cygwin?我的机器安装了cygwin,但脚本用户可能并不总是安装cygwin。我不想强迫他们这么做。为什么你不能使用cygwin?我的机器安装了cygwin,但脚本用户可能并不总是安装它。我不想强迫他们这么做。谢谢你详细的回答。从未想过简单地从批处理文件/批处理调用解析JSON。感谢您详细的回答。从未想过简单地从批处理文件/批处理调用解析JSON。