我希望下面的代码C:\Users\zjafri\Desktop\Arthur\Runner2
在运行此bat文件时在目录中打开,但是它将在我的桌面目录中打开。
有人知道为什么吗?
%windir%\system32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
CD C:\Users\zjafri\Desktop\Arthur\Runner2
控制台输出为:
C:\Users\zjafri\Desktop>C:\windows\system32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
(base) C:\Users\zjafri\Desktop>
使用的命令行对于想要的行为是错误的,该行为是通过将特定目录作为当前目录来激活Anaconda环境,并使命令进程保持运行状态,以便手动输入更多要执行的命令。
批处理文件是一个脚本。脚本需要脚本解释器可执行文件。Windows批处理文件的解释器是Windows命令处理器cmd.exe
,具有完整的合格文件名%SystemRoot%\System32\cmd.exe
或%ComSpec%
。SystemRoot
和ComSpec
是两个预定义的Windows环境变量。
Windows命令处理器在启动可执行文件时暂停批处理文件的处理,直到启动的可执行文件自身终止为止。
在cmd.exe
执行以下命令行的批处理文件的实例处理中会发生什么?
%windir%\system32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
Windows命令处理器会再启动一个命令进程来处理另一个批处理文件,并在批处理文件执行完成后继续运行,因为该选项/K
无用双引号引起来。因此,启动的的第二个实例cmd.exe
不会自身终止。出于这个原因,第一个实例cmd.exe
wait等待第二个实例的终止,cmd.exe
然后继续处理批处理文件并读取下一个命令行。
因此,CD C:\Users\zjafri\Desktop\Arthur\Runner2
仅当用户键入exit
第二命令过程以终止第二cmd.exe
实例时,命令行才由第一命令过程执行。
一种解决方案是在批处理文件中使用以下命令行:
call "C:\ProgramData\Anaconda3\Scripts\activate.bat" "C:\ProgramData\Anaconda3"
cd /D "%UserProfile%\Desktop\Arthur\Runner2"
该批处理文件导致执行该批处理文件activate.bat
,然后执行命令CD,然后完成该批处理文件的处理。
接下来发生的情况取决于批处理文件的启动方式。如果仅双击批处理文件,则Windows将cmd.exe
使用隐式选项调用/C
以执行批处理文件,然后关闭命令进程。因此,在双击批处理文件时,将打开一个控制台窗口,执行两个命令行,并且由于cmd.exe
终止自身而关闭了控制台窗口。
但是,如果用户打开了一个命令提示符,这意味着从cmd.exe
使用隐式选项开始/K
,然后在命令提示符窗口中键入其完整的限定文件名即可执行该批处理文件,而无需TAB输入或仅通过在输入后仅敲击一次或多次来获得完成帮助文件夹/文件名中的几个字符,然后按RETURN或ENTER执行批处理文件,命令提示符窗口保持打开状态,并且Anaconda环境被激活,目录%UserProfile%\Desktop\Arthur\Runner2
为当前目录。
好吧,首先打开命令提示符窗口并以完整路径手动运行批处理文件并不是很方便。批处理文件可以以短文件名存储在其中一个路径存在于环境变量(PATH
例如Windows目录)的值中的文件夹之一中。这样就可以打开命令提示符,仅键入批处理文件的文件名并按键RETURN或ENTER执行它。
另一个方便的解决方案是在用户桌面上创建一个快捷方式文件(* .lnk),其文件名Anaconda3
在快捷方式的属性中进行配置:
目标: %SystemRoot%\System32\cmd.exe /K C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
开始于: C:\Users\zjafri\Desktop\Arthur\Runner2
评论: Opens a command prompt and activates Anaconda3 in Runner2
使用快捷方式文件有多个优点。可以定义一个快捷键来启动Windows命令处理器并执行批处理文件以激活Anaconda环境,而与该应用程序当前具有输入焦点的位置无关,并且桌面是否位于应用程序窗口的后面或所有其他窗口的前面。上的选项卡的选项,字体,布局,颜色的选项和它的外表可以定义快捷方式的属性的应使用用于阿纳康达像使用控制台窗口具有更多行/列和具有较大的字体作为默认。
尽管使用快捷方式文件绝对是该使用情况的最佳解决方案,但也可以双击运行批处理文件以打开命令提示符窗口,以执行批处理文件来激活Anaconda环境并保留命令当前目录设置为所需目录的情况下运行的进程。
这样的批处理文件仅需要一个命令行:
@start "Anaconda3" /D"%UserProfile%\Desktop\Arthur\Runner2" %ComSpec% /K C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
在这种情况下cmd.exe
,使用此命令行处理批处理文件将启动一个新的命令进程,/K
该进程具有一个选项,该选项可通过执行以下操作来保持命令进程运行:以新控制台窗口的标题作为开始cmd.exe
,Anaconda3
并在启动cmd.exe
目录CD C:\Users\zjafri\Desktop\Arthur\Runner2
作为当前目录之前进行设置。在这种情况下,cmd.exe
不等待启动秒的终止,cmd.exe
因此cmd.exe
使用此单个命令行处理批处理文件的实例将立即终止。
这种批处理文件解决方案的缺点在于,用户无法配置激活Anaconda环境后继续运行的命令过程的选项,字体,布局,颜色。
为了了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
call /?
cd /?
cmd /?
start /?
PS:我既未安装Anaconda,也未阅读其文档。因此,我不知道C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
执行此批处理文件后会发生什么以及当前目录是什么。如果批处理文件编码正确,并且该参数C:\ProgramData\Anaconda3
并不意味着将当前目录更改为该目录,则所有操作均应如上所述。否则,需要根据activate.bat
环境的更改(即更改当前目录的时间)来调整提供的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句