公司做计算任务太重,买了好多台电脑,一算到半路停了个电,这家伙给我整的手忙脚乱的,各种重新启动计算,整个汪生都不好了,就想取个巧,让系统每次启动自动检测最近一次计算的文件,然后加载执行,搜索了很多,怕忘记了于是写下来做个记录,如果能给别人一点帮助就更好了。第一次写批处理,肯定是漏洞百出,不过在win10下运行正常。
rem表示这段话被注释了
echo off rem 让你执行的批处理不显示具体代码,我感觉就是为了画面不要太乱。。。
setlocal enabledelayedexpansion rem 这句就有点意思了,不知道为啥,在没有它的时候给变量之间传值无效,有了这一句以后,变量赋值的时候要变成set 变量=!变量!
set Ftemp=0 rem set 是设置变量,或是赋值什么的。这里初始两个变量用于下面比较
set Ttemp=0
for /r %%a in (*.cas) do (
rem bat里命令不区分大小写,但是要注意多空格,for是循环这不用说,但是对于批处理我的理解for更多是遍历的意思,后面解释
rem for。。。in。。。do()/r这个位置的参数有三个,/d /r /l /f
rem /d是取目录名字,不取文件名 /l类似C的for循环,可以设定循环多少次(在in后面的参数里给三个数,百度很多自己搜索
rem /f更复杂了,http://blog.csdn.net/jeefchen/article/details/5663822这篇文章很有帮助,为了感谢我已经粉了他
rem 这里用的是/r简单点说就是搜索目录和文件,
rem 这里唠叨一句,这个遍历的思想很重要
rem 除了/l参数以外,/d /r /f都是类似搜索引擎
rem 具体过程感觉像是,在根据指定的参数,搜索目录/文件/字符串,看到符合条件限制的单元的就进去执行以下do后面的代码,
rem %%a也有讲究,上面的博文说的很详细
rem in后面的.cas是指后缀名为cas的文件,这是我的计算文件,*是通配符,这里可以根据你的文件名
if "!Ttemp!" lss "%%~ta" (
rem 这里的Ttemp变量就加了!,据说这样才能表示它现在的值?不太懂
rem lss是if的比较大小的小于号,equ是等于,大于是啥来着,忘了,百度吧
rem 这里要说一下的是%%~ta,%%后面加变量名表示变量自不必说,这个~ta就有点。。。
rem ~ta意味着当前被遍历抓住的文件的创建(是创建还是修改来着忘了)时间,这个变量虽然连在一起但其实~t和a是两个东西,
rem ~t是参数,a代表的是for里的变量%%a,也就是说如果上面for中用的是%%i或是%%x,这里就要写%%~ti或%%tx
set Ftemp=%%a
set Ttemp=%%~ta
echo !Ftemp!
echo !Ttemp! rem 这里就是显示一下两个变量里是啥
echo 这个文件是最新的
) else ( rem 这里要注意一下else必须被俩括号背着,并且中间有空格。。。我犯了好多次,就是不记着。。。果然是老了
echo !Ftemp!
echo !Ttemp!
echo 这个文件是以前的
)
)
echo !Ftemp!
echo !Ttemp!
echo file/read-cas %Ftemp%>>xx.txt rem 这是输出给我的计算软件用的TUI,还挺方便,想要在txt里写啥就用>>输出就行了,不过后面遇到了一点异常,到时候再说
set Fdatemp=0
set Tdatemp=0
for /r %%a in (*.dat) do (
if "!Tdatemp!" lss "%%~ta" (
set Fdatemp=%%a
set Tdatemp=%%~ta
echo 这个文件是新的
)
) rem 这段主要上面的复制,不用解释
echo !Fdatemp!
echo !Tdatemp!
set str=!Ftemp! rem 这一段是从文件名中提取字符,我的命名是按照AB16cut16M-60-60-3m.cas或是.dat。这里先把Ftemp放到str别丢了
:cutagain rem 冒号后面的字符可以被bat识别为行标志,可以通过goto跳达
if "!str:~0,1!"=="-" ( rem 字符串剪切具体查百度有很多,0代表从第0个字符开始,1代表剪一个出来
set str=!str:~1! rem
echo !str!
goto next rem next是行标,下面有
) else ( rem 注意else前后要有空格和()
set str=!str:~1!
goto cutagain rem 跳到上面的cutagain行
)
echo !str! rem 我这里主要是想要裁出AB16cut16M-60-60-3m.中的3,这里的3有可能是两位数,标志着计算运行到了哪里,
rem 这里就取出了3及其后面的字符
:next
set str=!str:~6,2!
if "!str:~1!"=="m" (
set num=!str:~0,1!
echo !num!
) else (
set num=!str!
) rem 这段就取出了我想要的3及其之后,并且在m之前的东西
echo file/read-data %Fdatemp%>>xx.txt
echo file/auto-save/max-files 2>>xx.txt
echo solve/initialize/initialize-flow>>xx.txt
echo file/write-case %Ftemp% o>>xx.txt rem 这一段就是输出到xx.txt文本文档,是给fluent用的TUI
echo file/write-data %Fdatemp% o>>xx.txt rem 但是这里的o前面总是莫名其妙的带很长的空格,,额。。。貌似不叫空格,应该是两个制表符
if "!num!"=="3" (
goto cas9
) else if "!num!"="9" (
goto case18
)else if "!num!"="18" (
goto case27
)else if "!num!"="27" (
goto case36
)else if "!num!"="36" (
goto case45
)else if "!num!"="45" (
goto case54
)else if "!num!"="54" (
goto case60
)
:cas9 rem 还有很多但都是操作fluent的,我就不写了
:cas18
:cas27
:cas36
:cas45
:cas54
:cas60 rem 这些就都省略了
ren xx.txt 2.jou rem 这是把xx.txt的文件名改为2.jou,因为fluent识别jou文件
cd c:\ rem 这里启动fluent我也不写了
fluent 3d -t4 -i e:\2.jou rem 这都是启动fluent的TUI命令,-t4是说用四核计算,-i是有jou文件要导入
cd e:\
vbpost.vbs 这里是计算完了以后用vbs给我发个邮件
echo 处理成功
pause>nul