Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用BAT文件更改目录?_Batch File_Command Line - Fatal编程技术网

Batch file 如何使用BAT文件更改目录?

Batch file 如何使用BAT文件更改目录?,batch-file,command-line,Batch File,Command Line,运行此bat文件时,我希望下面的代码在C:\Users\zjafri\Desktop\Arthur\Runner2目录中打开,但它会打开到我的桌面目录 有人知道为什么吗 %windir%\system32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3 CD C:\Users\zjafri\Desktop\Arthur\Runner2 控制台输出为: C:\Users\zja

运行此bat文件时,我希望下面的代码在
C:\Users\zjafri\Desktop\Arthur\Runner2
目录中打开,但它会打开到我的桌面目录

有人知道为什么吗

%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>

在cmd命令(连接)之前执行cd命令,并将其全部包装在代码块中

(CD C:\Users\zjafri\Desktop\Arthur\Runner2 & cmd.exe /K C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3)

使用的命令行对于想要的行为是错误的,即激活Anaconda环境,使特定目录成为当前目录,并保持命令进程运行,以便手动输入更多要执行的命令

批处理文件是一个脚本。脚本需要脚本解释器可执行文件。Windows批处理文件的解释器是Windows命令处理器
cmd.exe
,它具有完整的限定文件名
%SystemRoot%\System32\cmd.exe
%ComSpec%
SystemRoot
ComSpec
是两个预定义的组件

Windows命令处理器在启动可执行文件时停止批处理文件的处理,直到启动的可执行文件本身终止

处理批处理文件的
cmd.exe
实例执行以下命令行时会发生什么情况

%windir%\system32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
Windows command processor启动另一个命令进程来处理另一个批处理文件,在批处理文件执行完成后保持运行,因为选项
/K
用双引号括起来无效。因此,
cmd.exe
的第二个启动实例不会自行终止。因此,
cmd.exe
的第一个实例在继续处理批处理文件并读取下一个命令行之前,会一直等待并等待
cmd.exe
的第二个实例的终止

因此,只有当用户在第二个命令进程中键入
exit
以终止第二个
cmd.exe
实例时,第一个命令进程才会执行命令行
CD C:\Users\zjafri\Desktop\Arthur\Runner2

一种解决方案是在批处理文件中使用以下命令行:

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
会自动终止

但是,如果用户打开了,这意味着使用隐式选项
/K
启动
cmd.exe
,并在命令提示窗口内通过键入完整的限定文件名(无完成帮助或有完成帮助)执行批处理文件,只需输入文件夹/文件名的几个字符,然后单击一次或多次选项卡,然后单击RETURN或ENTER执行批处理文件,命令提示符窗口保持打开状态,Anaconda环境被激活,目录
%UserProfile%\Desktop\Arthur\Runner2
为当前目录

首先打开一个命令提示符窗口并手动运行具有完整路径的批处理文件并不是很方便。批处理文件可以使用短文件名存储在其中一个文件夹中,该文件夹的路径在环境变量
path
的值中,就像Windows目录一样。这样就可以打开命令提示符,只键入批处理文件的文件名,然后按RETURN键或ENTER键执行批处理文件

另一个方便的解决方案是在用户桌面上创建一个快捷方式文件(*.lnk),文件名为
Anaconda3
,其中配置了快捷方式的in属性:

目标:
%SystemRoot%\System32\cmd.exe/K C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3

开始于:
C:\Users\zjafri\Desktop\Arthur\Runner2

注释:
打开命令提示符并在Runner2中激活Anaconda3

使用快捷方式文件有多种优点。可以定义一个快捷键来启动Windows command processor并执行批处理文件以激活Anaconda环境,该环境与应用程序当前的输入焦点无关,并且桌面位于应用程序窗口后面或所有其他窗口前面。在快捷方式属性的选项字体布局颜色选项卡上,可以定义选项和外观,在使用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
作为当前目录<在这种情况下,code>cmd.exe不会等待启动的第二个
cmd.exe
的终止,因此
cmd.exe
实例处理批处理文件