写批处理程序常遇问题

       继续我断断续续的Blog。
       最近用起了命令行程序,感慨它也能如此的简单好用。
       不用高级的开发工具,仅简单的文本编辑器就行;没有指针、引用、对象,有最简单的变量就够。

 

        批处理的语法我就不介绍了,下面介绍一些我遇到的问题:
1. echo的问题。
文件写入   echo 你想写的 > 文件名.后缀
文件追加   echo 东西 >> 文件名.后缀
输出空行   echo.

    echo能够屏幕输出其后的所有内容,可以有空格。
    如果要输出特殊符号如:< > ",等等,需要在特殊字符前面加^。否则会提示“命令语法不正确。”错误信息。
    其实^还有一个用途,如果想另起一行输入“输出内容”,可以在当前行末尾输入^,然后回车,继续输入,如:
>echo adfa^
More? adsfa
adfaadsfa


2. 如何能够双击一个批处理文件运行,而不关闭运行窗口?
可以另外写一个批处理startup.bat,内容是:
@cmd /k setenv.bat

 

3. 如何提示用户输入内容,代替Dos中的choice?
set LABELOBJ=                 将已经定义的变量删除,通过if defined LABELOBJ echo exist可以检查
set /p LABELOBJ= 请选择:      提示用户输入,并以“请选择”作为提示信息,用户输入并回车确定输入后可通过%LABELOBJ%获取输入内容

 

:_inputlabelobj
:: 标记对象:解决方案,解决方案集,不标记
set LABELOBJ=
echo. 选择要标记的对象:
echo 0. 不标记                        1. 当前解决方案                2. 当前解决方案集
set /p LABELOBJ= 请选择:
if not "%LABELOBJ%"=="" set LABELOBJ=%LABELOBJ%
if "%LABELOBJ%"=="0" goto _continue
if "%LABELOBJ%"=="1" goto _inputvernum
if "%LABELOBJ%"=="2" goto _inputvernum
goto _inputlabelobj


:_inputvernum
:: TODO
:_continue
:: TODO

 

4. 如何判断文件是否存在?
if exist filepath echo filepath exist

 

5. 如何在if、for选择条件后执行多条语句?
if exist expectfile (
  echo hello!
  echo %expectfile% exists.
)

for %i in ("hello", "Powerlly") do (
  echo %i
  echo.
)

 

6. 为什么for %i in ("hello", "Powerlly") do echo %i 放在批处理文件中执行不了,但是命令行窗口可以执行?
在批处理中%i,必须写成%%i。

 

7. 想逐行读取一文本文件,怎么办?
采用for的/f命令扩展名
for /f %%i in (TestSolutions.txt) do (
  if exist %%~ni (
    echo exist %%~ni
  )
)
如上看到的%%~ni表示“将 %%i 扩充到一个文件名”,for提供了增强的选项语法,详细请看帮助: help for。

 

8. 如何在两个批处理文件见传递数据?
当在一个批处理中调用(Call)另一个批处理文件时、当被调用批处理执行完返回时,两种情况:
前者可以通过向被调用方提供参数方式传递数据;
两者都可以通过输出文件来传递数据(没想到后面方法时想到的);
两者都可以通过环境变量传递数据(开始不知道可以这样,试验后可以);
如果只想知道执行状态时,errorlevel不知道怎么用来传递状态(好像不能像环境变量一样用)。?

 

9. 命令行下如何截取字符串?
看例子吧:
>echo %date%
2008-10-07 星期二
a. 从某位开始长多少的子字符串
set yy=%date:~2,2%
set mm=%date:~5,2%
set dd=%date:~8,2%
set yymmdd=%yy%%mm%%dd%

b. 字符串后几位
if not "%SOLUTIONNAME:~-3%"=="Sln" goto _err0

 

10. 如何拷贝一个目录,但是希望排除一些文件?
xcopy太神了。
set SRCDIR=源目录
set DESDRI=目标目录
set EXCLUDEFILE=exclude.txt
xcopy %SRCDIR% %DESDIR% /e /y /exclude:%EXCLUDEFILE%

exclude.txt中分行指定要排除的目录或者文件,如:
/bin/    排除源目录中bin子目录
bin      排除源目录中(递归)文件名以bin结尾的文件

 

11. 文件路径需要注意什么?
如果路径变量中存在空格,需要注意使用时最好带双引号"%fullpath%"

 

12. if /i 怎么用?
if除了判断文件是否存在,字符串是否相等,if还有其他用法,如/i一样还有

IF [/I] string1 compare-op string2 command        数值比较
IF CMDEXTVERSION number command                   还没用过,比较cmd版本吧
IF DEFINED variable command                       判断环境变量是否已存在,如exist

 

13. 有if,有else吗?
有。
同一行使用if后命令需要带括号, if exist file.txt ( echo file.txt exist ) else echo file.txt not exist
分行使用
if exist file.txt (
  echo file.txt exist
) else (
  echo file.txt not exist
)

 

14. 其他常用的命令:
rd、md、del

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值