Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 综合列表-在批处理文件中运行代码,而不是直接将代码输入控制台_Windows_Batch File_Cmd - Fatal编程技术网

Windows 综合列表-在批处理文件中运行代码,而不是直接将代码输入控制台

Windows 综合列表-在批处理文件中运行代码,而不是直接将代码输入控制台,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在寻找在windows cmd windows中运行完全相同的代码与手动逐行输入代码与编写批处理文件并运行该文件之间的全面差异列表 我不可能是第一个问这个问题的人,但谷歌和多堆栈溢出搜索都没有返回我想要的结果。我主要是比较像这一个,或者大约。我知道还有其他不同之处,比如我刚刚发现 set "filename=foo" set "optional_postfix=" set "filetype=.cpp" set completename=%filename%%optional_postfi

我正在寻找在windows cmd windows中运行完全相同的代码与手动逐行输入代码与编写批处理文件并运行该文件之间的全面差异列表

我不可能是第一个问这个问题的人,但谷歌和多堆栈溢出搜索都没有返回我想要的结果。我主要是比较像这一个,或者大约。我知道还有其他不同之处,比如我刚刚发现

set "filename=foo"
set "optional_postfix="
set "filetype=.cpp"

set completename=%filename%%optional_postfix%%filetype%
echo %completename%
PAUSE
表现不同

我想读一读所有的差异,因为在尝试了半个小时应该有效的东西后发现它们,然后发现差异是相当烦人的


如果这里已经有这样一个列表,请不要对我投反对票,我实际上花了很多时间寻找它,至少对我来说,不知道如何找到它。其他人可能也有同样的问题,所以请将其标记为重复。

命令是在cmd环境中执行还是在批处理文件环境中执行有许多不同之处,所有这些都涉及cmd内部命令或功能

以下命令在cmd上下文中执行时不起任何作用,它们不会产生任何输出,也不会影响:

后藤 转移 setlocal若要在cmd中en-/disable命令扩展或延迟扩展,请改为使用cmd/E:{ON | OFF}/V:{ON | OFF}调用实例 端部 像:Label这样的标签不能在cmd中使用,它们只是被忽略。因此,call:Label也不能使用。如果您这样做,将显示一条错误消息,并且ErrorLevel设置为1

当然,cmd中没有参数,因为不可能提供参数。因此,像%1这样的字符串只返回回回显%1。这允许在cmd中定义以数字开头的变量名,这在批处理文件中是不可能的。实际上,您可以定义它们,但不能扩展它们;在批处理文件中尝试此操作:设置123=abc,然后设置1;您将得到输出123=abc;但尝试执行echo%123%将导致输出23,因为如果没有提供参数,则会将%1识别为参数引用

未定义的环境变量不会在cmd中展开或替换,但它们会按字面意思进行维护,即设置VAR=和echo%VAR%,因此您会得到%VAR%。但是,在批处理文件中,它们被扩展为空字符串。请注意,在批处理文件中,而不是在cmd中,两个连续的百分号%%被替换为一个1%。同样在批处理文件中,但不在cmd中,单个%符号将被删除

有关参数引用和环境变量的扩展百分比的详细信息,请参见此线程:

set/A命令的行为不同:在cmd中,它返回控制台上表达式的最后一个结果,不带尾随的换行符,但在批处理文件中,它不返回任何内容

for命令要求其循环变量引用前面加上两个百分号,如%%I in。。。在批处理文件中,但只有一个类似于中的%I的文件。。。在cmd中。这是批处理文件和cmd中不同的扩展百分比处理的结果

最后,有些命令在成功后不会重置ErrorLevel,除非它们在扩展名为.cmd的批处理文件中使用。这些是:

协会 dpath 文件类型 路径 促使 设置
有关重置错误级别的更多信息,请参阅本文:

首先,参考以下线程:头脑中的快速回复:某些命令在cmd:goto、shift、setlocal、endlocal和call:Label;中不起作用;set/A将最后一个结果以cmd写入控制台,但不以批处理文件写入控制台;没有,;未定义的环境变量在批处理文件中扩展为空字符串,但在cmd中按字面意思进行维护;%%在批处理文件中变成文本%,但在cmd中不是;这就是为什么您必须在中声明%%I。。。在批处理文件中,但对于%I,在。。。在cmd中;还有一些命令可能会重置错误级别,也可能不会重置错误级别…@aschipfl:感谢您的链接,这似乎是一个好的开始。难怪我没有通过搜索找到它,我永远也不会仅仅通过阅读标题就猜到它包含了我要查找的内容。尽管主题不同,但您可以查看这些差异的列表以及如何使用批处理文件中没有的此类命令行命令的完整示例