我有一个文件夹c:\ Scripts。 我在那里放了三个文件:
n <- 1 ## the number of dimensions, set this now to 1
tmp <- split(df[,1:n], df$class)
d <- sqrt(matrix(rowSums(expand.grid(tmp$B*tmp$B,tmp$A*tmp$A)),
nrow=length(tmp$B)) -
2. * as.matrix(tmp$B) %*% t(as.matrix(tmp$A)))
print(d)
## [,1] [,2] [,3] [,4] [,5]
##[1,] 0.003 0.295 0.395 0.003 0.005
##[2,] 0.598 0.300 0.200 0.598 0.590
##[3,] 0.198 0.100 0.200 0.198 0.190
##[4,] 0.001 0.299 0.399 0.001 0.009
##[5,] 0.298 0.000 0.100 0.298 0.290
我的build.txt
trigger.bat
deploy.bat
内容中有内置版本号
build.txt
我试图以自动方式每天递增一个版本。所以,今天我的.txt文件有1.2.3.4,我的trigger.bat必须用命令行参数1.2.3.5(递增1)调用deploy.bat。它还应该用1.2.3.5覆盖我的.txt文件内容,因为我要安排它。所以,明天,它将自动增加到1.2.3.6,依此类推。
现在,我在1.2.3.4
:
trigger.bat
我有两个问题:
@echo off
set /p build=<version.txt
FOR /f "tokens=4* delims=." %%a IN ("%build%") DO (
set ver=%%a
)
set /A ver=ver+1
.\deploy.bat -version "1.2.3.%ver%"
我假设它会覆盖我的文本文件。如果没有,请帮助。我也熟悉PowerShell解决方案。我只知道Windows批处理脚本的一些基础知识,所以我选择了这条路线。
答案 0 :(得分:2)
1)为了隐藏,你有来反汇编它。所以你的方法走向了正确的方向。只需将其扩展一点以使其更灵活:
setlocal enabledelayedexpansion
set /p build=<version.txt
for /f "tokens=1-4 delims=." %%a in ("%build%") do (
set /a last=%%d + 1
set ver=%%a.%%b.%%c.!last!
)
echo %ver% > version.txt
.\deploy.bat -version "%ver%"
2)正确,>
会覆盖目标文件(或创建目标文件,如果它不存在)。 (>>
会附加)
答案 1 :(得分:1)
为什么首先将文件内容读入变量以通过for /F
解析它?您可以通过for /F
立即阅读该文件。使用>
重定向运算符,您最终可以覆盖文本文件。
以下是批处理脚本trigger.bat
的更新代码:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem // Define constants here:
set "FILE=%~dp0build.txt"
for /F "usebackq tokens=1-4 delims=." %%A in ("%FILE%") do (
set "VER=%%A" & set "MAJ=%%B" & set "MIN=%%C" & set "BLD=%%D"
set /A "BLD+=1"
rem // Rules for incrementing the numeric parts:
if !BLD! GTR 10 (set /A "BLD=1, MIN+=1")
set "VERSION=!VER!.!MAJ!.!MIN!.!BLD!"
)
> "%FILE%" echo %VERSION%
call "%~dp0deploy.bat" -version "%VERSION%"
endlocal
exit /B
要调用其他批处理文件deploy.bat
,您应该使用call
命令返回此批处理文件。 %~dp0
前缀告诉脚本在此脚本的父目录中搜索deploy.bat
,trigger.bat
(在您的情况下为C:\Scripts\
),与.\
相对,意思是搜索当前的工作目录。特别是当您通过Windows任务计划程序运行trigger.bat
时,我认为默认工作目录可能类似于%SystemRoot%\System32
。