应该是,但批处理对SET
语句中的空格敏感。 SET FLAG = N
设置一个名为“FLAG 空间”变量的“空间 N”
语法SET "var=value"
(其中值可以是空的)用于确保任何杂散尾部空格不包括在所述值的值分配。 set /a
可以安全地使用“无引号”。
当文件或目录名称中有空格时,这很重要。
我建议一些细微的变化:
@echo off
setlocal
SET "start_dir=%cd%"
cd ..
cd apps
SET "apps_dir=%cd%"
SET "my_dir=%apps_dir%\MY_DIR"
cd "C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug"
ConsoleApplication1.exe -i -f "%my_dir%"
cd "%start_dir%"
注意到
关闭@echo关闭命令回显批处理期间
SETLOCAL确保任何环境当批次结束时,所做的更改将被撤消,所以您不会遇到之前运行所做更改的陈旧数据问题
CD “destinationdir” - 引号是不通常需要,即使 “在路径中的空间”,但可能需要为奇怪的路径名(如含&
那些)
“%MY_DIR%”作为参数为consoleapplication1,以确保它视为一个单一的令牌
如果consoleapplication1.exe
是在路径上的目录,那么就没有必要cd
到该目录;命令consoleapplication1 ....
将访问它。当然,如果应用程序提供了一个不合格的文件名,然后它会假设该文件是在current
目录,而不是executable
的目录,所以有可能需要切换目录...
如果consoleapplication1.exe
位于不在路径上的目录中,则"C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug\consoleapplication1" ....
将访问它。如果包含引号,则引号是无害的,但对于完整可执行文件名称中的空格而言是必需的。
path
从提示符中将显示执行路径;每个目录用分号分隔。
有可能使用
@echo off
setlocal
SET "start_dir=%cd%"
pushd ..\apps
SET "apps_dir=%cd%"
SET "my_dir=%apps_dir%\MY_DIR"
pushd "C:\projects\ConsoleApplication1\src\ConsoleApplication1\bin\Debug"
ConsoleApplication1.exe -i -f "%my_dir%"
popd
popd
其中pushd
切换到指定的目标目录当前保存在一个简单的堆栈。 popd
从堆栈中弹出目录。