继续我断断续续的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