linux shell脚本将指令执行结果赋值给变量很容易,比如:
#!/bin/bash
file_name=`ls | wc -l`
echo ${file_name}
file_list=`ls -l | awk '{print $1, $nf}'`
echo ${file_list}
很容易将指令执行结果赋值给变量,然后通过变量在进行处理。
但是在批处理中,这种方法就不能使用了。如果需要把一个命令的处理结果赋值给一个变量,可以使用如下方法:
for /f "delims=" %%t in ('命令字符串') do set str=%%t
echo %str%
当命令字符串中含有%时,需要转义。使用imagemagick中的identify命令获取图片的宽和高:
identify -format %wx%h demo.jpg
直接在命令行中使用上述命令可以看到输出了图片的高和宽,但是用它放在批处理脚本中来获取命令的输出结果,则失败,原因是命令字符串中含有%符号,它在批处理有特殊含义,所有需要转义,转义的方法是使用两个%%,正确的做法是:
for /f "delims=" %%t in ('identify -format %%wx%%h demo.jpg') set str=%%t
还有一个需要注意的地方,如果中间有管道,需要使用转义符 ^
例如:判断文件个数,细细体会
这个例子是在windows环境下,映射了linux的磁盘,从windows目录向linux指定目录拷贝文件。
::前面的省略
z:
cd \mnt\external\workspace\%project%_cp_img\
for /f "tokens=*" %%i in ('dir /b ^|find /v /c "sc00*" ') do set files_num=%%i
if %files_num%==4 (
@echo on
echo cpoy_file successed
exit 0
)
else (
@echo on
echo copy_file failed
exit 1
)
::后面的省略
有读者可能会问,为什么不用%errorlevel%来判断,因为在使用的过程中出现过 %errorlevel% 返回值正确,但是没有拷贝到linux指定目录里面,所以不得已必须使用判断文件个数!