从Windows批处理文件中读取文件并调用另一个.bat

时间:2016-08-23 03:07:38

标签: windows batch-file cmd

我有一个文件夹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

我有两个问题:

  1. 我不知道如何增加,所以我划分了版本,尝试获取最后一个数字并递增它然后连接以传递我的版本。这是我猜的最糟糕的方式。我需要一些关于如何增加它的帮助。
  2. 如何覆盖文本文件?所以,如果我可以获得增量值的帮助,那么我想,我可以做一个@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%" 我假设它会覆盖我的文本文件。如果没有,请帮助。
  3. 我也熟悉PowerShell解决方案。我只知道Windows批处理脚本的一些基础知识,所以我选择了这条路线。

2 个答案:

答案 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.battrigger.bat(在您的情况下为C:\Scripts\),与.\相对,意思是搜索当前的工作目录。特别是当您通过Windows任务计划程序运行trigger.bat时,我认为默认工作目录可能类似于%SystemRoot%\System32