Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
当前回答
批处理文件中的数组。
设置一个值:
set count=1
set var%count%=42
在命令行提取一个值:
call echo %var%count%%
从批处理文件中提取一个值:
call echo %%var%count%%%
注意额外的扫射%符号。
这项技术可能看起来有点复杂,但它非常有用。如上所述,将打印var1(即42)的内容。如果我们想将其他变量设置为var1中的值,也可以用set替换echo命令。这意味着下面的值在命令行是有效的赋值:
call set x=%var%count%%
然后查看va1的值:
echo %x%
其他回答
允许您更改目录基于环境变量没有 必须指定'%'指令。如果指定的变量没有 存在,然后尝试目录名。
@if defined %1 (call cd "%%%1%%") else (call cd %1)
当你想在分支之间复制文件时,一个方便的技巧:
C:\src\branch1\mydir\mydir2\mydir3\mydir4>xcopy %cd:branch1=branch2%\foo*
Overwrite C:\src\branch1\mydir\mydir2\mydir3\mydir4\foo.txt (Yes/No/All)? y
C:\src\branch2\mydir\mydir2\mydir3\mydir4\foo.txt
这既使用了%cd%环境变量,也使用了环境变量替换。
There is also the EDLIN command. While it may be an old bastard tool once used for line-based text editing, the fact that it's controllable from the command line makes it rather useful for batch scripting, mostly because, just like any other case you'd be using EDLIN, it's the only tool available. After all, EDLIN is not a tool you would ordinarily want to use for text editing, unless you are somewhat masochistic. To quote Tim Patterson (the fellow who wrote it): "I was aghast when I heard that IBM was using it and not throwing it out the window."
注意:EDLIN将老式的EOF (1A)标记添加到它编辑的文件中。如果需要删除它们,可能必须使用DEBUG。
脚本所在的路径(带驱动器):~dp0
set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%
PUSHD path
将您带到path指定的目录。
POPD
带您回到您“推”的目录。