看一个例子,在Windows下使用批处理来将一堆jar文件合成一个长串,作为Java 运行命令的classpath的值。
1、应用场景
将TOMCAT lib目录下所有的jar文件合成一个长串。
2、错误的写法
(1)示例
首先想到的做法是这样的:
@echo off
set var=
for /R D:\apache-tomcat-7.0.67\lib %%m in (*.jar) do (
set var=%var%;%%m
echo %var%
pause
但最后,执行后,你会发现结果并非你所想象:
E:\Work\test>test_delayed_expansion1.bat
;D:\apache-tomcat-7.0.67\lib\websocket-api.jar
循环过程并没有将所有的jar文件合在一起,只是加入了一个文件。
(2)原因分析
原因是什么呢?和批处理文件的解释机制有关。下面是延迟环境变量的由来恰好解释了这种现象发生的原因:
cmd在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输的命令格式是否正确。如果我们要在命令中引用一些变量,那么我们需要在变量的两边各加一个%号,使cmd在解释我们的命令的时候能够识别这个变量,例如%name%。当cmd读取我们的命令进行格式匹配的时候,就会发现name这个字符串两边各加了一个%,就不会把它当作普通字符串处理,而是把它当作一个变量处理,变量名就叫做name。然后cmd就会查找这个变量的值,用该值替换掉%name%,最后执行这个替换好的命令。这个替换的过程就叫做环境变量扩展。
3、正确的写法
所以,正确的做法是使用延迟环境变量扩展,使用延迟环境变量的前提条件是使用语句:
setlocal enabledlayedexpansion
其次,获取变量值时不使用%var%,而是使用!var!。
下面是能正确拼合jar文件的脚本代码:
@echo off
setlocal enabledelayedexpansion
set var=
for /R D:\apache-tomcat-7.0.67\lib %%m in (*.jar) do (
set var=!var!;%%m
echo !var!
pause
变量名后不能使用空格,否则,变量名可能获取不正确,变量值若非必要,也不要包含空格。
看一个例子,在Windows下使用批处理来将一堆jar文件合成一个长串,作为Java 运行命令的classpath的值。1、场景:将TOMCAT lib目录下所有的jar文件合成一个长串。2、错误的写法(1)示例首先想到的做法是这样的:@echo offset var=for /R D:\apache-tomcat-7.0.67\lib %%m in (*.j
例如:想利用bat脚本查询出Git_commit号,
赋值
给
变量
,下面的pipeline语句用到此
变量
,通过直接
赋值
的方式,下一条语句是无法获取到
变量
值的。
此种写法:
//从项目readme中读取Git_Commit号
Git_Commit =bat label: '', script: 'compile_scripts\\git_commit.bat %svn_project% %svn_branch%'
//编译源码,其中Git_commit 获取不到值
1、bat
批处理
命令执行机制:bat命令是按照一行一行执行.如for,if等命令,即使我们用括号也是按照一行来执行。因此,在用for
循环
的时候,总是得不到想要的结果。“ 那是因为
变量
在
赋值
没有成功,而是一个空值。
解决方法:利用
变量
延迟
扩展
即可 。即
setlocal enabledelayedexpansion
2、用了
变量
延迟
,还是不行,可能是
变量
的写法不正确
(1) 通常
变量
我们的格式 ...
延迟
环境变量
在bat里是重中之重,虽然前面说过,熟练应用for才算会写
批处理
,但如果不懂
延迟
环境变量
的话,那么你就只能写出简单的
批处理
,而for语句也
不能
发挥最大的作用。
延迟
环境变量
在
cmd
下默认是关闭的,如果要使用
延迟
环境变量
,可以用以下两种方法开启:
1.
cmd
下开启/关闭
延迟
环境变量
在
cmd
下开启或
延迟
环境变量
用/v
基本上很少使用
批处理
文件,一是因为对它了解的少,二是似乎没有完整的资料说明。
昨天,又有同事说要弄个小工具,对目录改名,首先想到了
批处理
,然后上网上搜索,找到一段代码,拿过来少做修改,结果发现老是有问题,没办法,花了一天的时间,仔细研究了一下有关的问题,最后终于问题解决了
一、我的任务目标
先说明我的目标,然后为了达成这个目标,中间遇到了哪些困难,然后再逐个问题分析
在一个目录中有很多子目...
需求描述:
循环
读取一个文件夹中每个文件的绝对地址,打印文件绝对路径,并使bianli。
解决方法:开启
变量
延迟
,并且
变量
要用一对叹号“!!”括起来。
@echo off
setlocal enabledelayedexpansion
set /a v=0
for %%i in (d:\MyProject\pythonProjects\data\*.txt) do (
echo %%i
如果你已经配置了Redis
环境变量
,但仍然显示'redis-cli'不是内部或外部命令,则可能是因为你的
环境变量
配置不正确或者还没有重启
命令行
窗口。你可以尝试以下步骤来解决这个问题:
1. 确认
环境变量
配置正确:打开
命令行
窗口,输入“redis-cli -v”命令,如果显示了Redis的版本信息,则说明
环境变量
配置正确;如果没有显示,则需要检查
环境变量
配置是否正确。
2. 重启
命令行
窗口:在安装完Redis后,需要重新启动
命令行
窗口才能使
环境变量
生效。
3. 尝试手动添加
环境变量
:如果以上两个方法都无法解决问题,可以尝试手动添加
环境变量
。打开
命令行
窗口,输入“set PATH=%PATH%;redis安装路径”命令,其中“redis安装路径”为Redis的安装路径。例如,如果Redis安装在C盘的Redis目录下,则可以输入“set PATH=%PATH%;C:\Redis”命令。
如果以上方法都无法解决问题,则可能是Redis安装出了问题,需要重新安装Redis。
MySQL workbench问题:SSL connection error: SSL is required but the server doesn‘t support it.
Katherine999899: