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 用于更新属性文件中文本的批处理脚本_Batch File_Batch Processing - Fatal编程技术网

Batch file 用于更新属性文件中文本的批处理脚本

Batch file 用于更新属性文件中文本的批处理脚本,batch-file,batch-processing,Batch File,Batch Processing,我对这批货有个问题 我在目录中有一个属性文件。其中有一个文本“BuildNumber=0”。我想将此“BuildNumber=0”替换为“BuildNumber=%BUILD\u NUMBER%”。我使用下面的脚本来实现这一点 @echo on setlocal enabledelayedexpansion enableextensions ATTRIB -r -s C:\bldarea\myfile\..\..\jenkinstest\abc.properties CD C:\bldar

我对这批货有个问题

我在目录中有一个属性文件。其中有一个文本“BuildNumber=0”。我想将此“BuildNumber=0”替换为“BuildNumber=%BUILD\u NUMBER%”。我使用下面的脚本来实现这一点

@echo on
setlocal enabledelayedexpansion enableextensions


ATTRIB -r -s C:\bldarea\myfile\..\..\jenkinstest\abc.properties

CD C:\bldarea\myfile\file\Main_Releases\jenkinstest\
call :FindReplace "Buildnumber=0" "Buildnumber=%BUILD_NUMBER%" abc.properties
exit /b 

:FindReplace <Buildnumber=0> <Buildnumber=%BUILD_NUMBER%> <abc.properties>
set tmp="%temp%\tmp.txt"
If not exist %temp%\_.vbs call :MakeReplace
for /f "tokens=*" %%a in ('dir "%3" /s /b /a-d /on') do (
for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
echo(&Echo Replacing "%~1" with "%~2" in file %%~nxa
<%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
)
)
del %temp%\_.vbs
exit /b

:MakeReplace
>%temp%\_.vbs echo with Wscript
>>%temp%\_.vbs echo set args=.arguments
>>%temp%\_.vbs echo .StdOut.Write _
>>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
>>%temp%\_.vbs echo end with
@echo on
setlocal enabledelayedexpansion enableextensions
ATTRIB-r-s C:\bldarea\myfile\..\..\jenkinstest\abc.properties
CD C:\bldarea\myfile\file\Main\u Releases\jenkinstest\
调用:FindReplace“Buildnumber=0”“Buildnumber=%BUILD\u NUMBER%”abc.properties
退出/b
:FindReplace
设置tmp=“%temp%\tmp.txt”
如果不存在%temp%\\.vbs调用:MakeReplace
对于('dir“%3”/s/b/a-d/on')中的/f“tokens=*”%%a,请执行以下操作(
对于(`Findstr/mic:'%1”“%%a`)中的/f“usebackq”%%b,请执行以下操作(
echo(&echo将文件%%~nxa中的“%~1”替换为“%~2”
%tmp%
如果存在%tmp%move/Y%tmp%“%%~dpnxa”>nul
)
)
删除%temp%\\\.vbs
退出/b
:MakeReplace
>%temp%\\.vbs与Wscript的回显
>>%temp%\\.vbs回显集参数=.arguments
>>%temp%\\.vbs echo.StdOut.Write_
>>%临时%\\ vbs回显替换(.StdIn.ReadAll,args(0),args(1),1,-1,1)
>>%temp%\\.vbs回显结束
此脚本的问题是,它没有将BuildNumber=0转换为当前生成编号

从代码中的行:

:FindReplace <Buildnumber=0> <Buildnumber=%BUILD_NUMBER%> <abc.properties>
:FindReplace
如果我删除%symbol,则它正在打印“BuildNumber=%BUILD\u NUMBER%”,但“BuildNumber=0”仍存在于文档中。请有人帮助我正确替换文本


谢谢。

只需在这行中插入两个百分比:

call :FindReplace "Buildnumber=0" "Buildnumber=%BUILD_NUMBER%" abc.properties
这样:

call :FindReplace "Buildnumber=0" "Buildnumber=%%BUILD_NUMBER%%" abc.properties

%BUILD\u NUMBER%是一个全局环境变量吗?如果不是,它来自哪里?您不需要更改例程,只需要调用它。我正在通过jenkins启动一个生成,只是我将%BUILD\u NUMBER%定义为全局变量。它随每个BuildNumber而变化。jenkins如何将该变量传递到批处理文件中?我已经给出了productname_${BUILD_NUMBER}在Jenkins中,是一个全局环境变量,产品从中获得其内部版本号。在Jenkins中,有一个选项可以执行Windows批处理。我只是把脚本放在那里。还有一件事,Jenkins将其所有文件下载到一个工作区。当所有文件都在那里下载时,该脚本将执行。之后,ant运行,创建一个zip文件t“我仍然在文件中获得相同的输出。”#Fri 11月22日18:48:45 IST 2013 BuildType=dev FrameworkBuild=244 BuildNumber=0 ProductVersion=5.00.00 SoftwareFeatureID=990101 SequenceNumber=20131122 BuildNumber=82 FrameworkVersion=2.50.00“是否有办法删除此额外的BuildNumber=0文本。测试
FindReplace
通过以下方式工作正常:
调用:FindReplace“BuildNumber=0”“”abc.properties
。运行它并检查结果…替换似乎区分大小写。嗨,Aacini,脚本运行良好,我发现了问题。批处理脚本之后运行的xml正在注入值BuildNumber=0。因此,感谢您的帮助。