我们使用Jenkins作为CI工具。目前,我编写了一个批处理文件,它从记事本文件(由开发人员编写)获取构建值,然后将其复制到网络驱动器,并将构建值作为文件夹。
批处理文件如下所述
for /f "tokens=2" %%i in ('findstr Build "C:\Program Files (x86)\Jenkins\jobs\**\build.txt"') do set Build=%%i
set Build=%Build:'=%
if not exist "\%Build%\" mkdir "%Build%\"
我现在的动机是,如果记事本中的值是6.1或6.a,即十进制之后的任何值,它不会创建文件夹,而是将其放在6子文件夹中。或者,如果值已满,则会创建父文件夹。
我得到内部版本号的文本文件如下所示。
#define MyAppVersion '4.0.0.0'
#define MyFullAppVersion '4.1.0.0'
#define BuildNumber '81'
我需要根据“Build Number”中输入的值创建文件夹。如果值是十进制的,它应该在子文件夹中创建,否则应该只有一个主文件夹。
在以下输入的帮助下,我创建了下面的批处理文件来实现这一点,但它没有用。
for /f "tokens=2" %%i in ('findstr Build "C:\Folder Check\logs\build.txt"') do set Build=%%i
set Build=%Build:'=%
for /F "tokens=2""delims=." %%j in ('findstr Build "C:\Folder Check\logs\build.txt"') do set "sub=%%j"
if exist "\\network\%Version%\%Build%\" mkdir "\\network\%Build%\%sub%%"
if not exist "\\network\%Version%\%Build%\" mkdir "\\network\%Version%\%Build%\"
if exist "\\network\%Version%\%Build%\%sub%%j" XCOPY /y "C:\Program Files (x86)\Notepad++\readme.txt" "\\network\%Version%\%Build%\%sub%\" /E /S
if not exist "\\172.19.0.4\Departement$\Development\Development RCX\RCX_M02_CSP\INTERNAL RELEASES\CI\%Version%\%Build%\%sub%%" XCOPY /y "C:\Program Files (x86)\Notepad++\readme.txt" "\\network\%Version%\%Build%\" /E /S
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用以下代码拆分句点.
以及后面的所有内容:
for /F "delims=." %%j in ("%Build%") do set "Build=%%j"
另请参阅引用的set
语法,这是我一般推荐的语法,因为没有特殊字符可能会导致问题。
您的if exist
语法对我来说有点奇怪;我不确定目录%Build%
应该位于何处,因为您在存在检查期间位于\
之前,但在创建期间不会。如果要确保当前工作目录中存在该目录,请不要在\
:
if not exist "%Build%\" mkdir "%Build%"
如果你想让它位于当前驱动器的根目录中,那么请先按\
进行,但我想这不是你想要的。
但是,需要追加 \
来检查目录是否存在;不提供它也会检查文件。
无论如何,为了确保目录存在,您不需要检查是否存在,您只需创建它并禁止出现该目录已存在的错误消息,如下所示:
mkdir "%Build%" 2> nul
我不确定我是否正确解释了你的路径规范中的**
,但我认为你会让我知道......
您只能在路径的 last 元素中使用全局通配符(*
,?
),因此C:\Program Files (x86)\Jenkins\jobs\**\build.txt
无效。如果C:\Program Files (x86)\Jenkins\jobs\
中只有一个目录,您可以这样:
for /D %%D in ("C:\Program Files (x86)\Jenkins\jobs\*") do set "SubDir=%%~D"
如果有多个目录并且您想获得最后一个目录,可以使用:
for /F "eol=: delims=" %%D in ('
dir /B /A:D /O:D "C:\Program Files (x86)\Jenkins\jobs\*"
') do set "SubDir=%%D"