我正在尝试在BAT文件中打开一个新的命令窗口:
start %windir%\system32\cmd.exe
打开后,我想在新窗口中执行BAT命令:
echo "test in new window"
我该怎么做呢?
我正在尝试在BAT文件中打开一个新的命令窗口:
start %windir%\system32\cmd.exe
打开后,我想在新窗口中执行BAT命令:
echo "test in new window"
我该怎么做呢?
这并不容易。
最好的方法是将希望在“新窗口”中执行的脚本部分放在单独的.bat文件中。这可能是不切实际的,例如,你需要从你的脚本的其他部分(变量等)很多状态。一种选择是将你需要的任何值(例如dir)传递给批处理文件:
start cmd.exe stuff.bat %this_dir%
如果你有大量的状态要传输,你可以考虑在运行时生成一个批处理文件:
set foo=Hello, World
set list_me=%userprofile%
set tmpdir=c:\windows\temp
set tmp=%tmpdir%\tmp.foo
del /q /f "%tmp%"
echo.echo %foo%>>"%tmp%"
echo.dir "%list_me%">>>"%tmp"
start cmd.exe "%tmp%"
del /q /f "%tmp%"
显然这是一个简单的例子。
你可能已经找到答案了,因为你是在一段时间前问的。但我在编写ror代码时也尝试了类似的方法。我想在一个新的cmd窗口中运行“rails服务器”,这样我就不必打开一个新的cmd,然后再次找到我的路径。
我发现像这样使用K开关:
start cmd /k echo Hello, World!
start before "cmd"将在一个新窗口中打开应用程序,"/K"将在新cmd启动后执行"echo Hello, World!"
您还可以使用/C开关进行类似的操作。
start cmd /C pause
这将执行“pause”,但在命令完成时关闭窗口。在这种情况下,你按下按钮。我发现这对“rails服务器”很有用,然后当我关闭我的开发服务器时,我不必关闭窗口。
感谢Stack Overflow的所有人;这个解决方案解决了上面的问题,但被扩展为自动运行这些任务:
我想运行我的rails服务器 为我的delayed_job gem运行一个rake jobs:worker 和打开默认的互联网浏览器显示我的页面 最后,在会话期间为任何额外命令打开CMD窗口。
我想我的项目叫做“反古伦”。
在你的%USERPROFILE%目录中创建一个“init.bat”文件(打开一个cmd窗口,看看光标左边的路径,知道%USERPROFILE%是什么)
@echo off
cd C:/projects/rails3/antiquorum
if "%1" == "antiquorum" GOTO start
if "%1" == "worker" GOTO worker
if "%1" == "server" GOTO server
if "%1" == "" GOTO end
:start
start cmd /k %USERPROFILE%\init.bat worker
start cmd /k %USERPROFILE%\init.bat server
TIMEOUT 30
start "" "http://localhost:3000/"
GOTO end
:server
rails s
GOTO end
:worker
rake jobs:work
:end
在新的命令行窗口中输入:C:> init antiquorum
这段代码打开了另外两个cmd窗口和一个浏览器。TIMEOUT可以避免浏览器中的错误。
:start部分完成这项工作。 您可以通过输入参数as: server, worker或none来分别运行任务1,2或4,以在“antiquorum”项目的根目录下打开cmd。
享受。
在批处理文件中使用以下命令:
start cmd.exe /c "more-batch-commands-here"
or
start cmd.exe /k "more-batch-commands-here"
/c执行命令 由字符串指定,然后 终止 /k执行 由字符串but指定的命令 仍然是
使用cmd /?查看cmd.exe文档欲知详情。
当使用带空格的参数时,命令字符串的正确格式变得更加复杂。请看下面的例子。注意一些例子中嵌套的双引号。
例子:
运行一个程序并传递一个filename参数: CMD /c write.exe c:\docs\sample.txt
运行一个程序并传递一个长文件名: CMD /c write.exe "c:\sample documents\sample.txt"
程序路径中的空格: CMD /c "c:\Program Files\Microsoft Office\Office\Winword.exe""
程序路径+参数中的空格: CMD /c ""c:\程序文件\演示。cmd"" Parameter1 Param2 . CMD /k ""c:\batch files\demo. "cmd" "参数1包含空格""参数2包含空格""
启动demo1和demo2: CMD /c ""c:\程序文件\demo1。c:\Program Files\demo2.cmd
来源:http://ss64.com/nt/cmd.html
以上的答案对我很有帮助。但仍然需要一些思考。下面是一个示例脚本,我用来启动3个过程的web开发。这导致3个窗口保持打开状态,因为它们需要持续运行。
Mongo被全局添加到我的路径中,所以我不需要像对其他两个程序那样进行cd。当然,文件的路径会有所不同,但希望这对您有所帮助。
:: Start MongoDB
start cmd.exe /k "mongod"
:: cd app directory, and start it
cd my-app
start cmd.exe /k "npm run dev"
:: cd to api server, and start that
cd ../my-app-api
start cmd.exe /k "npm run dev"
在一个新的CMD窗口中运行一个python文件,文件名中有空格。
start cmd.exe /k python "C:\Program Files\HelloWorld.py"
我想让我的窗口在我杀死或重新启动Firebase后保持打开,所以我使用了两个批处理文件。
便于访问的桌面文件:run_firebase.bat:
--------------START FILE CONTENTS--------------
start cmd /k C:\dev\init_firebase_batch.bat
---------------END FILE CONTENTS---------------
C:\dev\init_firebase_batch.bat
--------------START FILE CONTENTS--------------
cd C:\dev\aptr_datasync\aperture-customer-hub
firebase emulators:start
---------------END FILE CONTENTS---------------
所以…双击run_firebase.bat,它将运行第二批。在按Ctrl+C退出我的进程后,窗口仍然打开。看似微不足道,但我不喜欢在写代码时分心。
我花时间解是因为我觉得它很简单。希望这能为其他人带来同样的简单。
我认为这验证了最初帖子中的问题:
我正在尝试在BAT文件中打开一个新的命令窗口 [x]打开后,我想在新窗口中执行BAT命令
扩展来自@Dan Zuzevich的回答。如果你的目标文件在不同的驱动器上,下面是CD“更改目录”。例如,它必须从C盘和D盘调用文件。
:: Start MongoDB
start cmd.exe /k "mongod"
:: cd app directory, and start it
cd C:\project\dev
C:
start cmd.exe /k "npm run dev"
:: cd to api server, and start that
cd D:\api\server
D:
start cmd.exe /k "npm run dev"
我需要运行一个环境,然后在该环境中使用python。
如果我的文件夹结构是:
C:\environments>
C:\environments\encrypted_stuff>
C:\environments\encrypted_stuff\p1>
C:\environments\encrypted_stuff\p2>
我想激活“encrypted_stuff”环境,然后从p2调用一个脚本,我可能会在存储在C:\environments\p2.bat中的bat中输入这个脚本
start cmd /k "Scripts\activate && cd p2 && python p2_script.py"
然后我可以有一个bat文件的任何脚本和所有将使用我的“encrypted_stuff”环境。现在我可以从桌面上单击bat文件,它将加载我的特定环境,然后在该环境中运行脚本。