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
Batch file 通过批处理文件替换.properties文件中的数字_Batch File_Batch Processing - Fatal编程技术网

Batch file 通过批处理文件替换.properties文件中的数字

Batch file 通过批处理文件替换.properties文件中的数字,batch-file,batch-processing,Batch File,Batch Processing,我有一个.properties文件,比如abc.properties文件。它有一个文本BuildNumber=0。我想搜索BuildNumber并通过批处理文件将其值与当前BuildNumber重放 如果有人能帮忙,请。我不熟悉批处理脚本 任何帮助都将不胜感激 谢谢使用sed,您可以非常轻松地完成此任务 #!/bin/bash BUILD="1.1" sed "s/^BuildNumber=.*/BuildNumber=$BUILD/" abc.properties 这假设BuildNumbe

我有一个.properties文件,比如abc.properties文件。它有一个文本BuildNumber=0。我想搜索BuildNumber并通过批处理文件将其值与当前BuildNumber重放

如果有人能帮忙,请。我不熟悉批处理脚本

任何帮助都将不胜感激


谢谢

使用sed,您可以非常轻松地完成此任务

#!/bin/bash
BUILD="1.1"
sed "s/^BuildNumber=.*/BuildNumber=$BUILD/" abc.properties
这假设BuildNumber和=符号之间没有空格,否则您可以使用此符号:

sed "s/^\(BuildNumber\s*=\s*\).*$/\1$BUILD/" abc.properties

下面是使用batch/vbs混合脚本的另一种方法

@echo off
setlocal

call :FindReplace "Buildnumber=0" "Buildnumber=1.21" abc.properties
exit /b 

:FindReplace <findstr> <replstr> <file>
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关闭
setlocal
调用:FindReplace“Buildnumber=0”“Buildnumber=1.21”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回显结束

这是使用Windows还是Linux?批处理文件无法在Linux下运行…至少在没有wine和某些版本的cmd.exe的情况下是如此-即使这样,它可能会被证明是困难的+1,sed也是我对Windows用户的建议:+1@endro,但我会使用
repl.bat
而不是对Windows使用sed。对于用户来说,它更容易安装(sed有多个版本,有些版本具有依赖性),不需要管理员权限即可安装,并且功能良好。
repl.bat
from-通常,当我必须在windows环境下工作时,我只需使用cygwin就可以拥有所有unix实用程序,如sed、grep、awk、ssh……我认识的许多人都这样做!使用windows bas很难达到同样的简洁程度ed toolsHey Bendaizer。我只想使用批处理。因为我的jenkins服务器安装在windows 2k3上,所有文件都存储在同一台机器上。它从服务器获取文件,并生成当前文件,所以请提供批处理文件的解决方案。Rhey Matt感谢这实际上是在为属性文件工作。我还有一件事j我只是想问一下。它能不能不把BuilNumber=1.21和替换为当前BuildNumber。是的,你可以。把你想要的任何东西放在呼叫行中,像这样:
call:Findreplace“string to find”“string to replace to find”文件
请u@matt my build system提供更多帮助从Performce获取数据并创建一个到本地repo的zip。因此,如果它可以转到某个特定路径,然后文件将得到更新。感谢您的所有帮助抱歉,Vicky,我不太明白。您能更详细地解释一下您希望发生什么吗?嗨,matt,我是使用jenkins服务器作为我的构建系统。以前我使用BuildForge构建我的项目。BuildForge在BTM文件中有一个逻辑,可以更改我的属性文件的buildnumber,创建一个zip文件,并将其移动到本地repo。现在在jenkins中,只有一个选项可以执行Windows批处理文件,它的功能完全相同,但它不支持oesn不会更新我的属性文件。我想通过P4同步代码找到该文件,然后创建一个zip。我已经编写了一些脚本,但它们都不起作用。