[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[特效代码] [实用技巧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 编辑 ]

批处理编程实用技巧预备100条,第一条开始:

批处理编程实用技巧 系列 001——变量的批量快速赋值

问题背景:
在写bat代码的时候,在很多情况下都要使用变量延迟,所以在脚本中 又长又易敲错的
“setlocal enabledelayedexpansion”使用的频率接近于“echo off”,而在命令行下则要以cmd /vn启动cmd.exe

cmd 提供的set 命令不能一次赋值多个变量(除了 使用/a 参数 对数字值变量的赋值 外),对普通变量的赋值常常要 用&来连接,或者每行一个set。

如果你对赋值命令的要求不是很高,且希望代码简短,请

保存以下代码为pset.bat 存放在windows文件夹下
  1. :pset [/A variable=expression]; [variable=string]; ... [; variable]...
  2. @setlocal enabledelayedexpansion&set "arg=%*"
  3. @endlocal&set %arg:;=&set %&goto:eof
复制代码
用法说明:
分号作为赋值语句的分割符,也可以以一个分号后只跟一个变量名用来显示该变量的变量值
算法说明:
在命令下使用下面测试代码时,请将pset代码中endlocal前的@去掉,算法原理一览无余。

命令行下测试(无需开启变量延迟):
  1. 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!=%

上面两句相当于
  1. set array_1=a
  2. set array_2=b
  3. set array_3=c
  4. set array_4=d
  5. set array_5=1
  6. set array_6=2
  7. set array_7=3
  8. set array_8=4
  9. set array_9=5
  10. 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 编辑 ]

TOP

看到了这个方法:
  1. if "%cmdcmdline:~4,2%"=="/c" (echo 双击运行 & pause) else (echo cmd 中运行)
复制代码

TOP

有时间推荐大家研究下start,这个人感觉最有挖掘潜力,它是启动新的进程唯一命令,是后面技巧的基石,如果你对call的用法已炉火纯清,call %* + start 会是一个新的领域 ^_^
如果你对doskey很有研究,start + cmd + doskey 会使一片新的天地 ^_^

   LZ何不把你的这点发掘分享一下 多少无所谓 或者发个讨论贴
  遇到过一个问题: start不能用的情况下怎样打开一个程序后 cmd窗口自动退出
  因为call   或者直接程序路径 运行后都是要关闭程序 窗口才退出的
  有时间是该研究下

TOP

我也发现对一般人没多用处,看需要了,这个即可双击运行也可命令行下运行,省了你打开命令提示符的一个操作,相信有人用得着

[ 本帖最后由 plp626 于 2009-6-1 08:24 编辑 ]

TOP

没有看太明白~~  呵呵  新手

TOP

返回列表