![从批处理文件运行文件](https://linux22.com/image/1622424/%E4%BB%8E%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E8%BF%90%E8%A1%8C%E6%96%87%E4%BB%B6.png)
我在 Windows 10 中工作。
这是我保存在.bat 文件中的代码:
%windir%\System32\cmd.exe "/K" C:\Users\Alex\AppData\Local\Continuum\anaconda3\Scripts\activate.bat C:\Users\Alex\AppData\Local\Continuum\anaconda3
"c:\Arch\Upload from DB to Redcap.py"
如果我手动打开命令提示符 (cmd) 并执行每一行,一切都会正常工作。但是,如果我执行包含上述内容的 .bat 文件,第一行可以正常执行,但第二行只会将当前文件夹更改为c:\Arch\
文件夹,并且Upload from DB to Redcap.py
文件不会被执行。如何修复我的代码,以便我的代码的第二行执行Upload from DB to Redcap.py
位于的文件c:\Arch\Upload from DB to Redcap.py
?
答案1
cmd /keep vs cmd /continue
如果您使用/k
,并且不需要引号,那么直到您键入exit
命令,上的下一个命令bat/cmd
才会被执行。
您启动了一个“解释器”并且没有离开/退出/关闭它,只有在此之后才会执行您的下一个命令......cmd /keep
当你通过输入“cmd /k”打开新的解释器来使用终端时,它之所以有效是因为你正在直接与它交互,在这种情况下,在 bat 中,有效的行是:cmd /k "...\enable.bat"
,命令中的 bat 文件也会被执行,因为它在同一行上。
在 bat 中,cmd / k somefile.bat [or] some command
它将启动一个新的解释器并保持打开状态以进行输入,直到您输入 exit 或关闭当前 cmd 窗口。否则,它将一直等待您插入一个或多个命令来执行它们,并且在代码中,下一个执行在下一行:(“C:\Arch\Upload from DB to Redcap.py”),除非您为当前解释器输入它,或者输入exit
quit 并返回上一个解释器运行下一行命令, 否则它永远不会运行。
尝试替换,你的解释器将逐行执行你的代码......cmd /c
但我认为这甚至不是一个cmd
运行他的电话bat/cmd
。
命令解释器(cmd.exe
)将仅通过执行或单击它来执行您的bat
/ cmd
,无需添加特定指令来执行您的bat
脚本。
将以下代码保存为 file.bat 并尝试:
@echo off
cd /d "%UserProfile%\AppData\Local\Continuum\Anaconda3"
call .\Scripts\Activate.bat "%UserProfile%\AppData\Local\Continuum\Anaconda3"
py "c:\Arch\Upload from DB to Redcap.py"
此外,如果您在一个bat
文件中使用来执行另一个bat
文件,那么使用call c:\file.bat
...
[√]命令
[√]cmd/MS 文档
答案2
如果 python.exe 在您的中PATH
,您可以尝试将其添加python.exe
到有问题的行前面:
python.exe "c:\Arch\Upload from DB to Redcap.py"
另一个选择是使用以下start
命令:
start /b "" "c:\Arch\Upload from DB to Redcap.py"
/b
告诉start
不要打开新cmd
窗口,并""
避免将其解释"c:\Arch\Upload from DB to Redcap.py"
为标题。