我想创建几个批处理文件来自动化一个程序。
我的问题是,当我创建批处理文件时,当前目录是什么? 它是文件所在的目录还是出现在命令提示符中的相同目录,或者是其他目录?
我想创建几个批处理文件来自动化一个程序。
我的问题是,当我创建批处理文件时,当前目录是什么? 它是文件所在的目录还是出现在命令提示符中的相同目录,或者是其他目录?
在批处理文件中:
%cd%
指代当前工作目录(变量)%~dp0
指代批处理文件所在目录的完整路径(静态的)%~dpnx0
和 %~f0
都指代批处理目录和文件名的完整路径(静态的)。另请参阅:%~dp0是什么意思,它是如何工作的?
通常情况下,该批处理文件所在的目录是启动它的目录,但如果您从快捷方式启动批处理文件,则可能会给出不同的起始目录。此外,当您在cmd中时,当前目录为c:\dir3
,您仍然可以使用c:\dir1\dir2\batch.bat
启动批处理文件,在这种情况下,当前目录将为c:\dir3
。
set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)
假设你想打开Myprog.exe。如果它在同一个文件夹中,你可以使用以下命令:
start %mypath%\Myprog.exe
这将从当前文件夹打开Myprog。
另一种选择是在C:中创建一个名为AutomatePrograms的目录。然后,您将文件传输到该文件夹,然后可以使用以下命令打开它们:
start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
%cd%
是一个变量,因此以管理员身份从Windows资源管理器运行批处理文件将会得到C:\WINDOWS\system32
,这几乎肯定不是您想要的。%~dp0
更加一致。 - icc97假设您想要在当前目录下打开一个文件,命令应该是:
start %cd%\filename.filetype
.bat
文件调用时,这很容易解析为 C:\Windows\filename.filepath
,而不是使用批处理文件所在的位置。 在这种情况下,%cd%
解析为 CMD 的位置,而不是该文件的位置。 - Koenigsberg这是执行批处理文件的命令所在的目录。
如上述答案中提到的,您可以在脚本中添加以下命令进行验证:
> set current_dir=%cd%
> echo %current_dir%
这是批处理文件启动时的目录。例如,如果您的批处理文件位于c:\dir1\dir2
中,并且您执行了cd c:\dir3
,然后运行该批处理文件,则当前目录将为c:\dir3
。
以下是我的个人观点。
如果从放在U盘上的批处理文件(Windows 7)中调用以下命令,则会失败:
%SystemRoot%\System32\xcopy.exe /e /i "%cd%Ala" "C:\KS\Ala\"
%SystemRoot%\System32\xcopy.exe /e /i "%~dp0Ala" "C:\KS\Ala\"
%~dp0
。 - Ammar Mohammadcd [其他目录]
命令进行操作。
dp0给出了执行批处理文件所在的目录的完整路径。%dpnx0(等同于%~f0)则给出了批处理文件的完整路径。有关更多详细信息,请参见http://www.robvanderwoude.com/parameters.php。 - deadlydog.cmd
文件并以管理员身份运行时,%cd%
返回C:\WINDOWS\system32
,而%~dp0
返回批处理文件所在的目录,末尾带有斜杠。 - icc97%~dp0
引用批处理文件参数的驱动器和路径。它__不是__一个环境变量引用,而是一个__批处理文件参数__引用。%~dp0
展开为__当前处理的__批处理文件的完整路径。例如,批处理文件C:\Temp\Devlopement & Test()!\Main.bat
在执行时%~dp0
展开为C:\Temp\Devlopement & Test()!\
,可以使用call "%~dp0..\SubBatch.cmd"
调用批处理文件C:\Temp\SubBatch.cmd
,其中也包含%~dp0
在执行时展开为C:\Temp\
。在 cmd 窗口中运行call /?
获取帮助。 - Mofi