运行 .bat 文件的命令

Posted

技术标签:

【中文标题】运行 .bat 文件的命令【英文标题】:Command to run a .bat file 【发布时间】:2017-04-23 03:32:57 【问题描述】:

我正在尝试让我的 Visual Studio 构建脚本执行一个 .bat 文件来执行一些重要的操作。

这是我现在想做的事情:

cd "F:\- Big Packets -\kitterengine\Common\" Template.bat

但它不起作用。

我必须这样做才能使它工作:

cd "F:\- Big Packets -\kitterengine\Common\"
F:
Template.bat

但这很难添加到 Visual Studio 脚本中。

我怎样才能在一行中做到这一点?

【问题讨论】:

"F:\- Big Packets -\kitterengine\Common\Template.bat" 可能以call 开头(参见call /?)。或Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat。请参阅我的 CMD 备忘单 - ***.com/questions/40371443/… 不使用 Visual Studio,不清楚这个问题及其答案是否适用于我。要么解释“Visual Studio 构建脚本”的上下文是什么,要么通过编辑标题明确限制问题。 【参考方案1】:

您可以使用 Cmd 命令来运行批处理文件。

这是我的方式 =>

cmd /c ""Full_Path_Of_Batch_Here.cmd" "

更多信息 => cmd /?

【讨论】:

谢谢!我可以从命令提示符中知道错误是什么,因为我不知道如果我只是双击运行批处理文件:)【参考方案2】:

"F:\- Big Packets -\kitterengine\Common\Template.bat" 可能以call 开头(参见call /?)。或Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat


CMD 备忘单

Cmd.exe

获得帮助

标点符号

命名文件

启动程序

按键

CMD.exe

首先要记住它是一种操作计算机的方式。这是我们在 WIMP(Windows、图标、鼠标、弹出菜单)变得普遍之前所做的方式。它源于 CPM、VMS 和 Unix。它用于启动程序以及复制和删除文件。您也可以更改时间和日期。

有关启动 CMD 的帮助,请键入 cmd /?。您必须使用 /k/c 开关启动它,除非您只想输入它。

获得帮助

一般帮助。在命令提示符下键入Help。对于列出的每个命令,键入help <command>(例如help dir)或<command> /?(例如dir /?)。

有些命令有子命令。例如schtasks /create /?

NET 命令的帮助不寻常。键入 net use /? 是简短的帮助。键入net help use 以获得全面帮助。这同样适用于根目录 - net /? 也是简要帮助,请使用 net help

帮助中对新行为的引用描述了从 OS/2 和 Windows NT4 中的 CMD 到 Windows 2000 及更高版本中的当前 CMD 的变化。

WMIC 是一个多用途命令。输入wmic /?


标点符号

&    seperates commands on a line.

&&    executes this command only if previous command's errorlevel is 0.

||    (not used above) executes this command only if previous command's 
errorlevel is NOT 0

>    output to a file

>>    append output to a file

<    input from a file

2> Redirects command error output to the file specified. (0 is StdInput, 1 is StdOutput, and 2 is StdError)

2>&1 Redirects command error output to the same location as command output. 

|    output of one command into the input of another command

^    escapes any of the above, including itself, if needed to be passed 
to a program

"    parameters with spaces must be enclosed in quotes

+ used with copy to concatenate files. E.G. copy file1+file2 newfile

, used with copy to indicate missing parameters. This updates the files 
modified date. E.G. copy /b file1,,

%variablename% a inbuilt or user set environmental variable

!variablename! a user set environmental variable expanded at execution 
time, turned with SelLocal EnableDelayedExpansion command

%<number> (%1) the nth command line parameter passed to a batch file. %0 
is the batchfile's name.

%* (%*) the entire command line.

%CMDCMDLINE% - expands to the original command line that invoked the
Command Processor (from set /?).

%<a letter> or %%<a letter> (%A or %%A) the variable in a for loop. 
Single % sign at command prompt and double % sign in a batch file.

\\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming.

: (win.ini:streamname) accesses an alternative steam. Also separates drive from rest of path.

. (win.ini) the LAST dot in a file path separates the name from extension

. (dir .\*.txt) the current directory

.. (cd ..) the parent directory


\\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off. 

命名文件

< > : " / \ | Reserved characters. May not be used in filenames.



Reserved names. These refer to devices eg, 

copy filename con 

which copies a file to the console window.

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, 

COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, 

LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9

CONIN$, CONOUT$, CONERR$

--------------------------------

Maximum path length              260 characters
Maximum path length (\\?\)      32,767 characters (approx - some rare characters use 2 characters of storage)
Maximum filename length        255 characters

启动程序

请参阅 start /?call /? 以获取所有三种方式的帮助。

有两种类型的 Windows 程序 - 控制台或非控制台(即使它们没有,也称为 GUI)。控制台程序附加到当前控制台或 Windows 创建一个新控制台。 GUI 程序必须明确创建自己的窗口。

如果没有给出完整路径,则 Windows 会查找

    加载应用程序的目录。

    父进程的当前目录。

    Windows NT/2000/XP:32 位 Windows 系统目录。使用 GetSystemDirectory 函数获取此目录的路径。这 此目录的名称是 System32。

    Windows NT/2000/XP:16 位 Windows 系统目录。没有 获取此目录的路径的函数,但它是 搜索。此目录的名称是 System.

    Windows 目录。使用 GetWindowsDirectory 函数获取 此目录的路径。

    PATH 环境变量中列出的目录。

指定程序名称

这是启动程序的标准方式。

c:\windows\notepad.exe

在批处理文件中,批处理将等待程序退出。什么时候 键入命令提示符不等待图形 程序退出。

如果程序是一个批处理文件控制被转移,调用批处理文件的其余部分不被执行。

使用启动命令

Start 以非标准方式启动程序。

start "" c:\windows\notepad.exe

Start 启动程序并且不等待。控制台程序在新窗口中启动。使用/b 开关强制控制台程序进入同一个窗口,这否定了 Start 的主要目的。

开始使用 Windows 图形外壳 - 与键入 WinKey + R(运行对话框)相同。试试

start shell:cache

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 下注册的程序名称也可以在不指定完整路径的情况下键入。

还要注意第一组引号,如果有的话,必须是窗口标题。

使用调用命令

调用用于启动批处理文件并等待它们退出并继续当前批处理文件。

其他文件名

键入非程序文件名与双击文件相同。


按键

Ctrl + C 退出程序而不退出控制台窗口。

对于其他编辑键,请键入 Doskey /?

调用命令

ESC 清除命令行

F7 显示命令历史记录

ALT+F7 清除命令历史记录

F8 搜索命令历史记录

F9按数字选择命令

ALT+F10 清除宏定义

也未列出

Ctrl + 一次移动一个单词

Ctrl + Backspace 删除前一个单词

首页行首

End行尾

Ctrl + End删除到行尾

【讨论】:

虽然这是有用的信息,但大部分与问题无关。该操作没有询问如何使用命令行或如何使用计算机或批处理,这就是我否决它的原因:无关紧要。【参考方案3】:

可以参考这里:https://ss64.com/nt/start.html

start "" /D F:\- Big Packets -\kitterengine\Common\ /W Template.bat

【讨论】:

【参考方案4】:

解决这个任务有很多可能性。

1。运行带有完整路径的批处理文件

最简单的解决方案是运行带有完整路径的批处理文件。

"F:\- Big Packets -\kitterengine\Common\Template.bat"

一旦到达批处理文件Template.bat 的末尾,如果上面的命令行位于 *.bat 或 *.cmd 文件中,则不会返回到先前的脚本。

批处理文件Template.bat的当前目录是当前进程的当前目录。如果Template.bat 要求此批处理文件的目录为当前目录,则批处理文件Template.bat 应在@echo off 之后作为第二行包含以下命令行:

cd /D "%~dp0"

在命令提示符窗口中运行 cd /? 以显示此命令的帮助,解释参数 /D ... 也可以在不同的驱动器上更改到指定目录。

在命令提示符窗口中运行 call /? 以显示此命令的帮助,该命令也在 2.、4. 和 5. 解决方案中使用并解释了 %~dp0 ... 参数 0 的驱动器和路径批处理文件的名称。

2。调用带有完整路径的批处理文件

另一种解决方案是调用具有完整路径的批处理文件。

call "F:\- Big Packets -\kitterengine\Common\Template.bat"

与第一个解决方案的不同之处在于,在到达批处理文件 Template.bat 的末尾后,批处理会在包含此命令行的批处理脚本中继续。

对于上面读取的当前目​​录。

3。使用一个命令行更改目录和运行批处理文件

在一个命令行上运行多个命令有 3 个运算符:&amp;&amp;&amp;||。 详情见Single line with multiple commands using Windows batch file回复

我建议使用&amp;&amp; 运算符来完成这项任务。

cd /D "F:\- Big Packets -\kitterengine\Common" && Template.bat

与第一个解决方案一样,如果这是 *.bat 或 *.cmd 文件并且更改目录并继续在 Template.bat 上成功进行批处理,则不会返回到当前脚本。

4。使用一个命令行更改目录和调用批处理文件

此命令行更改目录并在成功时调用批处理文件。

cd /D "F:\- Big Packets -\kitterengine\Common" && call Template.bat

与第三种解决方案的不同之处在于退出处理Template.bat时返回到当前批处理脚本。

5。通过一个命令行保持当前环境更改目录和调用批处理文件

以上四种解决方案改变了当前目录,不知道Template.bat做了什么

    当前目录 环境变量 命令扩展状态 延迟扩展状态

如果保持当前 *.bat 或 *.cmd 脚本的环境不受 Template.bat 对其自身环境的任何更改的影响,建议使用 setlocalendlocal

在命令提示符窗口中运行setlocal /?endlocal /? 以显示这两个命令的帮助。并阅读change directory command cd ..not working in batch file after npm install 上的答案,更详细地解释这两个命令的作用。

setlocal & cd /D "F:\- Big Packets -\kitterengine\Common" & call Template.bat & endlocal

现在只使用了&amp; 而不是&amp;&amp;,因为这里重要的是,在执行setlocal 之后,命令endlocal 最终也会执行。


更多说明

如果批处理文件Template.bat 包含不带参数/B 的命令exit 并且该命令被真正执行,则命令进程总是退出独立于调用层次结构。因此,如果此批处理文件中完全使用了 exit,请确保 Template.bat 包含 exit /Bgoto :EOF 而不仅仅是 exit

【讨论】:

以上是关于运行 .bat 文件的命令的主要内容,如果未能解决你的问题,请参考以下文章

如何用bat文件执行cmd命令?

bat文件里的换行命令

bat 文件多条命令的执行

BAT文件运行时不显示命令窗口的方法

BAT批处理后台运行的命令是啥?

用BAT文件运行CMD命令,怎么编辑??