Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?

指南:

每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包

澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。

(请参见:Windows批处理文件:.bat vs .cmd?)


当前回答

HELP

当使用不同的操作系统版本时,了解本机可用的命令是很重要的。在命令提示符处输入HELP可以显示可用的命令,以及它们的功能的简要描述。

cmd.exe /? 

这将列出用于启动命令提示符的所有命令行参数,以及更改整个系统行为的注册表调整。

其他回答

要从文件的第一行开始设置一个环境变量,我使用以下命令:

rem a.txt contains one line: abc123
set /p DATA=<a.txt
echo data: %DATA%

这将输出:abc123

前面已经提到了%~dp0部分,但实际上还有更多内容: ~之后的字符定义了提取的信息。 返回补丁文件名时不包含字母 D -返回驱动器号 P -返回路径 S -返回短路径 X -返回文件扩展名 如果你在c:\Temp\long dir name\文件夹中执行test.bat脚本,

@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0

您将得到以下输出

测验 c: \Temp\长目录名\ c:\Temp\长目录名\ 。bat c: \ Temp \ \ test.bat LONGDI ~ 1 1 \ \ Temp \ LONGDI ~

如果一个参数被传递到你的脚本中 测试c: \ temp \ mysrc \ test.cpp 同样的操作也可以用于%1变量。

但是%0扩展的结果取决于位置! 在批处理的“顶层”,它扩展到当前批处理文件名。 在函数(调用)中,它展开为函数名。

@echo off
echo %0
call :test
goto :eof

:test
echo %0
echo %~0
echo %~n0

输出是(批处理文件以myBatch.bat开始)

myBatch.bat
:test
:test
myBatch

关于使用::而不是REM进行评论:要小心!::是CALL标签的一种特殊情况,作用类似于注释。当在括号内使用时,例如在for或IF循环中,函数将提前退出。调试非常令人沮丧!

详细描述请参见http://www.ss64.com/nt/rem.html。

(添加一个新的答案,而不是上面第一次提到的评论,因为我还不值得评论:0)

现在很多人使用GOTO:EOF来终止他们的批处理文件,但你也可以使用EXIT /B来达到这个目的。

使用EXIT /B的优点是你可以在EXIT /B之后添加一个错误级别,它将退出该错误级别。

使用copy追加文件:

copy file1.txt+file2.txt+file3.txt append.txt

另外,将所有CLI参数设置为一个变量:

SET MSG=%*

这将使用空格分隔的每个单词(或符号)并将其保存到单个批处理文件变量中。从技术上讲,每个参数都是%1、%2、$3等等,但是这个SET命令使用通配符来引用stdin中的每个参数。

批处理文件:

@SET MSG=%*
@echo %MSG%

命令行:

C:\test>test.bat Hello World!
Hello World!