
标题: [特效代码] [实用技巧1]双击批处理进入命令行操作运行 [打印本页]
作者: plp626 时间: 2009-5-31 14:29 标题: [实用技巧1]双击批处理进入命令行操作运行
昨天在优化 colstr.bat 点此进入链接 时想到这个思路,特别新开一帖与大家分享
::双击P进入命令行操作 by plp626
@if %1.==. if /i not %prompt:~-4%==$s$h (cmd /s/k"prompt %prompt%$s$h&%0 "参数""&exit)
::上面的参数可换成自己喜欢的,比如可无参数,多参数或特别符号的参数,建议参数不要含有双引号
::------------------------下面是你的代码部分----------------------
@echo off
if "%~1"=="参数" (
echo.键入: "%~n0 参数1 do 1"
echo.......
exit/b 当然这里还可以goto到子过程,也可call子过程
)
echo do sth.
::------------------------------------------------------------------------[/code]
批处理能做的事情很有限,但我觉得他很有趣,特别是因为有了start,cmd,call,prompt几个命令,
对了还有个doskey,本帖对他们的技巧只挖掘了冰山一角,有兴趣,大家结合cmd/s/k"...." 把doskey填进去一定会激发更浓厚的兴趣,
有时间推荐大家研究下start,这个人感觉最有挖掘潜力,它是启动新的进程唯一命令,是后面技巧的基石,如果你对call的用法已炉火纯清,call %* + start 会是一个新的领域 ^_^
如果你对doskey很有研究,start + cmd + doskey 会使一片新的天地 ^_^
因为我没时间去挖掘了,特把想法和大家分享下
[ 本帖最后由 plp626 于 2009-6-1 08:19 编辑 ]
作者: chongzhi 时间: 2009-5-31 22:30
没有看太明白~~ 呵呵 新手
作者: plp626 时间: 2009-6-1 08:22
我也发现对一般人没多用处,看需要了,这个即可双击运行也可命令行下运行,省了你打开命令提示符的一个操作,相信有人用得着
[ 本帖最后由 plp626 于 2009-6-1 08:24 编辑 ]
作者: dali 时间: 2009-6-1 10:55
有时间推荐大家研究下start,这个人感觉最有挖掘潜力,它是启动新的进程唯一命令,是后面技巧的基石,如果你对call的用法已炉火纯清,call %* + start 会是一个新的领域 ^_^
如果你对doskey很有研究,start + cmd + doskey 会使一片新的天地 ^_^
LZ何不把你的这点发掘分享一下 多少无所谓 或者发个讨论贴
遇到过一个问题: start不能用的情况下怎样打开一个程序后 cmd窗口自动退出
因为call 或者直接程序路径 运行后都是要关闭程序 窗口才退出的
有时间是该研究下
作者: tireless 时间: 2009-6-27 22:17
看到了这个方法:- if "%cmdcmdline:~4,2%"=="/c" (echo 双击运行 & pause) else (echo cmd 中运行)
复制代码
作者: plp626 时间: 2011-4-22 11:39
批处理编程实用技巧预备100条,第一条开始:
批处理编程实用技巧 系列 001——变量的批量快速赋值
问题背景:
在写bat代码的时候,在很多情况下都要使用变量延迟,所以在脚本中 又长又易敲错的
“setlocal enabledelayedexpansion”使用的频率接近于“echo off”,而在命令行下则要以cmd /v
n启动cmd.exe
cmd 提供的set 命令不能一次赋值多个变量(除了 使用/a 参数 对数字值变量的赋值 外),对普通变量的赋值常常要 用&来连接,或者每行一个set。
如果你对赋值命令的要求不是很高,且希望代码简短,请
保存以下代码为pset.bat 存放在windows文件夹下- :pset [/A variable=expression]; [variable=string]; ... [; variable]...
- @setlocal enabledelayedexpansion&set "arg=%*"
- @endlocal&set %arg:;=&set %&goto:eof
复制代码
用法说明:
分号作为赋值语句的分割符,也可以以一个分号后只跟一个变量名用来显示该变量的变量值
算法说明:
在命令下使用下面测试代码时,请将pset代码中endlocal前的@去掉,算法原理一览无余。
命令行下测试(无需开启变量延迟):- pset /a a=626,b=828,x=a+b+a*b;x;DT=!date!-!time!
复制代码
脚本调用中pset 请记得使用call 命令!
批处理中的批量 简洁 赋值法 涉及的问题还很多,比如,如何不使用!!,%%来展开变量的值,而是像c语言那样表达式般读取,在此不专门讨论了。
[ 本帖最后由 plp626 于 2010-11-9 20:55 编辑 ]
批处理编程实用技巧 002 一维数组
一维数组模拟可以有多种方法,这个方法相对来说代码比较简短,试用于编写函数库或者追求代码体积小巧者借鉴:
set array=a,b,c,d,1,2,3,4,5,6
set #c=1&set array_1=%array:,=&set/a#c+=1&set array_!#c!=%
上面两句相当于-
- set array_1=a
- set array_2=b
- set array_3=c
- set array_4=d
- set array_5=1
- set array_6=2
- set array_7=3
- set array_8=4
- set array_9=5
- set array_10=6
复制代码
说明以下,“array=a,b,c,d,1,2,3,4,5,6” 每个变量需要用仅有的一个逗号分开,如果了解原理,上面两句也可以改为用空格分割:
set "array=a b c d 1 2 3 4 5 6"
set #c=1&set array_1=%array: =&set/a#c+=1&set array_!#c!=%
运行后数组中变量的个数就是#c的值,我们可以把它存到array_0中,至于作用,大伙自然知道:
set "array=a b c d 1 2 3 4 5 6"
set #c=1&set array_1=%array: =&set/a#c+=1&set array_!#c!=%&set array_0=!#c!
[ 本帖最后由 plp626 于 2010-11-9 21:52 编辑 ]
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |