相关疑难解决方法(0)

Windows批处理文件的隐藏功能

Windows批处理文件有哪些鲜为人知但又重要且有用的功能?

指南:

  • 每个答案一个功能
  • 给出功能的简短描述示例,而不仅仅是文档的链接
  • 限制原生功能的答案,即不需要其他软件,如Windows资源工具包

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

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

windows hidden-features batch-file

232
推荐指数
38
解决办法
22万
查看次数

使用nodejs的spawn会导致"unknown option - "和"[Error:spawn ENOENT]"错误

我试图spawn实现一个rm -rf node_modules跟随npm install(在Windows 7; n x命令由透明安装的CygWin提供.所有n x命令在命令行上解析就好了).

我最初使用它exec,但想要捕获stdout/stderr信息,因此我想我会使用spawn,并重写代码使用它.然而,这打破了一切.

rm重写的命令变为:

var spawn = require("child_process").spawn,
    child = spawn("rm", ["-rf", "node_modules"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { console.log(data.toString()); });
child.on('error', function() { console.log(arguments); });
Run Code Online (Sandbox Code Playgroud)

但是,运行它会生成以下错误:

rm: unknown option -- ,

Try `rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)

npm重写的命令变为:

var spawn = require("child_process").spawn,
    child = spawn("npm", ["install"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { …
Run Code Online (Sandbox Code Playgroud)

exec spawn node.js

33
推荐指数
1
解决办法
4万
查看次数

批处理文件不运行 - 它们是用记事本打开的

我使用WinXP sp3,我创建了一个可以做某事的.bat文件.当我双击它时,打开一个记事本,我可以编辑批处理文件 - 但它不会运行??!?!

我希望当我双击一个.bat文件时 - 它应该运行,不是吗?我怎样才能解决这个问题?

file batch-file

24
推荐指数
6
解决办法
6万
查看次数

退出批处理文件中的FOR循环?

为什么这个批处理文件永远不会脱离循环?

For /L %%f In (1,1,1000000) Do @If Not Exist %%f Goto :EOF
Run Code Online (Sandbox Code Playgroud)

不应该Goto :EOF突破循环?

编辑:

我想我应该更明确地问... 我怎么能摆脱循环?

for-loop batch-file break

24
推荐指数
6
解决办法
9万
查看次数

成功后哪个cmd.exe内部命令将ERRORLEVEL清除为0?

在Windows批处理脚本中处理错误的常用方法是使用
if errorlevel 1 ...或等if %errorlevel% neq 0 ....通常,人们希望错误处理代码保留ERRORLEVEL.

我相信所有外部命令总是会导致ERRORLEVEL被设置为某个值,因此错误处理代码必须在执行外部命令之前在环境变量中保留ERRORLEVEL.

但内部命令怎么样?问题是,一些内部命令在成功时将ERRORLEVEL清除为0,而有些则没有.而且我找不到任何指定哪些命令做什么的文档.

所以问题是,哪些内部命令成功后将ERRORLEVEL清除为0?不是关于返回的ERRORLEVEL代码的一般问题,而是严格关于成功结果的问题.

有些帖子如何将ERRORLEVEL重置为零的最简单方法是什么?Windows批处理文件:.bat vs .cmd?给出部分答案.但我从未见过全面的清单.

注意: 多年来我一直很好奇.所以我最终决定进行一系列实验并得出一个明确的答案.我发布此问答来分享我发现的内容.

cmd batch-file errorlevel

21
推荐指数
1
解决办法
3623
查看次数

命令提示符执行具有相同名称的文件的顺序(a.bat vs a.cmd vs a.exe)

Windows命令提示符执行具有相同名称但不同扩展名的文件的顺序是什么?

例如,我有一堆可执行文件(something.cmd,something.bat,something.exe).当我在命令提示符中键入"something"时(如果它们在路径上等),将执行以下哪些操作?如果该文件不存在,那么将执行哪一个?

有没有描述这个的参考?

windows command-line cmd batch-file

16
推荐指数
1
解决办法
6954
查看次数

*.bat和*.cmd文件之间有什么区别?

可能重复:
Windows批处理文件:.bat vs .cmd?

嗨,

我正在学习Windows Batch编程并遇到这个问题:

.bat.cmd文件有什么区别?

如果它们是相同的,为什么需要2个呢?

BTW,command.comcmd.exe有什么区别?

windows shell batch-file windows-shell

12
推荐指数
1
解决办法
4万
查看次数

批量转到丢失错误级别

考虑以下bat,test.bat(PC01关闭):

mkdir \\PC01\\c$\Test || goto :eof
Run Code Online (Sandbox Code Playgroud)

如果我从命令shell运行该bat:

> test.bat || echo 99
> if ERRORLEVEL 1 echo 55
Run Code Online (Sandbox Code Playgroud)

输出只有55.没有99.有一个错误级别,但||操作员没有看到它.

如果我用那个蝙蝠跑 cmd /c -

> cmd /c test.bat || echo 99
> if ERRORLEVEL 1 echo 55
Run Code Online (Sandbox Code Playgroud)

输出为空白.Errorlevel为0.

如果我删除了|| goto :eof,一切都按照人们的预测 - 即输出即可

99 55

有谁知道为什么这种半生半熟的ERRORLEVEL行为正在发生?

windows cmd batch-file

12
推荐指数
1
解决办法
4987
查看次数

"|| exit /b" 和 "|| exit /b !errorlevel!" 之间的区别

我们有一堆.bat构建脚本,这些脚本由基于 PowerShell 的 GitLab 运行器调用,这些运行器最近重构为:

program args
if !errorlevel! neq 0 exit /b !errorlevel!
Run Code Online (Sandbox Code Playgroud)

更简洁:

program args || exit /b
Run Code Online (Sandbox Code Playgroud)

今天我调查了一个构建作业,如果您查看错误日志,该作业显然失败了,但报告为成功。经过大量实验,我发现这种模式并不总是按预期工作:

program args || exit /b
Run Code Online (Sandbox Code Playgroud)

但是当前者没有时,这似乎确实有效:

program args || exit /b !errorlevel!
Run Code Online (Sandbox Code Playgroud)

我已经阅读了 SO question Windows batch exit option b with or without errorlevel和下面来自https://www.robvanderwoude.com/exit.php的声明,但仍然不能完全解释我正在观察的内容。

DOS 联机帮助 (HELP EXIT) 没有明确说明 /B 参数退出当前脚本实例不一定与退出当前脚本相同。即,如果脚本在 CALLed 代码段中,则 EXIT /B 退出 CALL,而不是脚本。


这是我用来探索这个的最小批处理文件:

@echo off
setlocal EnableDelayedExpansion
cmd /c "exit 99" || exit /b
:: cmd /c …
Run Code Online (Sandbox Code Playgroud)

powershell cmd batch-file

12
推荐指数
3
解决办法
426
查看次数

通过shell脚本在windows中导出/设置环境变量

有一个script.sh文件

 set FABRIC_CFG_PATH=<some path>
 set CORE_PEER_LOCALMSPID=<some id>
Run Code Online (Sandbox Code Playgroud)

如果我在 Windows 中运行此脚本,则不会设置环境变量。而如果使用 cmd 方法设置 env,例如,在 windows cmd 上 set FABRIC_CFG_PATH=<some path> 它工作正常。

那么如何通过shell脚本文件在windows中设置env呢?

powershell cmd export set environment-variables

6
推荐指数
1
解决办法
2万
查看次数

xp批处理文件中的行长度限制?

在.bat文件中运行long命令时(比如300个字符长度)

例如:

Some_exe "C:/Documents and Settings/Some user/Some folder1/Some folder2/Some folder3/Some folder4 ... -Some_exe_arg1="arg 1 name" -Some_exe_arg2="arg 2 name" -Some_exe_arg3="arg 3 name"  
Run Code Online (Sandbox Code Playgroud)

CMD.exe可以处理的行大小是否有限制?我应该使用.CMD还是.BAT?有什么方法可以克服这个限制吗?

谢谢!

windows-xp dos batch-file

4
推荐指数
2
解决办法
4661
查看次数

将多个命令放入一个批处理文件中

我觉得这必须是如此简单,不知怎的,我只是遗漏了一些东西.我有3个命令,我必须连续执行.如何将这些全部放入一个批处理文件中?

以下是命令:

cl /c /Zl /I"c:\EFI_Toolkit_2.0\include\efi" /I"c:\EFI_Toolkit_2.0\include\efi\em64t" c:\sandbox\efi_main.c
link /entry:main /dll /IGNORE:4086 efi_main.obj
fwimage.exe app efi_main.dll efi_main.efi
Run Code Online (Sandbox Code Playgroud)

我尝试在每行的前面添加'start',虽然我看到每个命令echo'd只有第一个执行(即我只获得efi_main.obj但不是.dll或.efi).

这些也需要在visual studio shell中执行,只要我从shell中运行我的批处理文件我认为这就足够了吗?

batch-file

4
推荐指数
1
解决办法
3万
查看次数

需要将其插入bat文件中

此脚本自动生成图像标记,但我需要将此命令放入Windows bat文件中.在cmd窗口中编写时,这段代码可以正常工作.

FOR %i IN (*.JPG) DO ECHO ^<img src="%i" /^> >> index.html
Run Code Online (Sandbox Code Playgroud)

感谢致敬

batch-file

0
推荐指数
1
解决办法
133
查看次数