【发布时间】:2014-09-03 13:21:09
【问题描述】:
我在folder1/folder2/file.bat中使用批处理文件
父文件夹folder1中有一个批处理文件,我想通过file.bat打开它
我尝试过使用:
start ..\..\code.bat
但这会导致错误消息,因为找不到文件。
有什么想法吗?
【问题讨论】:
标签: batch-file call
我在folder1/folder2/file.bat中使用批处理文件
父文件夹folder1中有一个批处理文件,我想通过file.bat打开它
我尝试过使用:
start ..\..\code.bat
但这会导致错误消息,因为找不到文件。
有什么想法吗?
【问题讨论】:
标签: batch-file call
我想通过示例更好地解释应该使用什么,因为到目前为止发布的答案仅适用于当前工作目录是包含批处理文件 file.bat 的目录。
目录结构如下:
当前工作目录是 C:\Temp 在执行 Example.bat 时使用
"Folder 1\Folder 2\Example.bat"
或与
"C:\Temp\Folder 1\Folder 2\Example.bat"
批处理文件Parent.bat 包含例如:
echo %0 is active.
pause
批处理文件Example.bat 已经包含:
@echo off
echo Calling Parent.bat ...
rem How to run Parent.bat here?
echo %0 is active.
pause
在当前工作目录与包含Example.bat 的目录不同的情况下,在这种情况下真正可行的解决方案如下。
"%~dp0..\Parent.bat"
%0 在执行批处理文件时引用参数 0,该参数始终是启动批处理文件时父进程中指定的批处理文件的名称。
但想要的是不带双引号的批处理文件的驱动器和路径。因此表达式 %~dp0 用于从参数 0 获取 C:\Temp\Folder 1\Folder 2\。
在此路径上附加字符串 ..\Parent.bat,以及整个新文件名
C:\Temp\Folder 1\Folder 2\.. \Parent.bat 因为有空格,所以用双引号括起来。
Parent.bat处理完成后没有返回Example.bat。
call "%~dp0..\Parent.bat"
命令 call 导致批处理文件 Parent.bat 在同一命令进程(控制台窗口)中执行,并暂停 Example.bat 的执行,直到 Parent.bat 完成。
在处理完Parent.bat 后,批处理在Example.bat 中的下一行继续执行。
例外:Parent.bat 包含命令 exit 没有开关 /B,因为这会导致命令行解释器立即退出 cmd.exe 处理 Example.bat 和 Parent.bat .
在命令提示符窗口中执行call /? 或help call 以获得有关命令call的简短帮助。
start "Parent Batch" "%~dp0..\Parent.bat"
命令 start 没有任何参数(可选标题除外)导致批处理文件 Parent.bat 在单独的控制台窗口中由单独的命令进程执行,而不会停止 Example.bat 的执行。
因此两个批处理文件同时运行(或多或少)。
注意:
命令 start 将双引号中的第一个字符串解释为标题。因此,当要启动批处理文件或应用程序时,必须在双引号中明确定义标题,或者由于 1 个或多个空格必须在双引号中指定已启动的批处理文件/应用程序的任何参数。
在命令提示符窗口中执行start /? 或help start 以获得命令start的简短帮助。
start "Parent Batch" /wait "%~dp0..\Parent.bat"
带有可选参数 /wait 的命令 start 导致已启动的批处理文件/应用程序作为单独的进程执行(批处理文件或控制台应用程序的附加控制台窗口),但会停止执行当前批处理文件,直到启动的进程(在新控制台窗口中执行的 Windows 应用程序或批处理文件/控制台应用程序)自行终止。
【讨论】:
..\ 用于上一级。你的案子需要两个级别
试试:
start ..\..\code.bat
【讨论】:
你可以:
cd..
start Code.bat
这将从自己的目录启动 code.bat
【讨论】:
尝试使用这个:
start ../code.bat
【讨论】: