用于运行.bat文件的命令

时间:2016-12-08 01:17:32

标签: windows cmd command prompt

我试图让我的Visual Studio构建脚本执行一个重要的.bat文件。

以下是我现在想做的事情:

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

但它没有用。

我必须这样做才能使它发挥作用:

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

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

如何在一行中完成这项工作?

4 个答案:

答案 0 :(得分:26)

"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会查找

  1. 加载应用程序的目录。

  2. 父进程的当前目录。

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

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

  5. Windows目录。使用GetWindowsDirectory函数来获取 这个目录的路径。

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

  7. 指定程序名称

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

    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 删除上一个单词

    • 主页行首

    • 结束行尾

    • Ctrl + 结束删除到行尾

答案 1 :(得分:4)

可参考此处:https://ss64.com/nt/start.html

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

答案 2 :(得分:3)

解决此任务有很多种可能性。

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。使用一个命令行更改目录和RUN批处理文件

在一个命令行上有3个运算符用于运行多个命令:&&&||
有关详细信息,请参阅Single line with multiple commands using Windows batch file

上的答案

我建议&&运算符执行此任务。

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

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

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

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

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

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

5。使用一个命令行保留当前环境

,更改目录和CALL批处理文件

上面的四个解决方案更改了当前目录,并且不知道Template.bat

的影响
  1. 当前目录
  2. 环境变量
  3. 命令扩展状态
  4. 延迟扩张状态
  5. 如果保持当前* .bat或* .cmd脚本的环境不受任何Template.bat环境变化的修改,则建议使用setlocal和{{ 1}}。

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

    endlocal /?

    现在只使用了setlocal & cd /D "F:\- Big Packets -\kitterengine\Common" & call Template.bat & endlocal 而不是&,因为在&&执行后最终还会执行命令setlocal,这一点非常重要。

    再多注意

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

答案 3 :(得分:0)

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

这是我的方式=>

cmd /c ""Full_Path_Of_Batch_Here.cmd" "

更多信息=> cmd /?