我有一个批处理脚本,我从一个文件夹运行,即在另一个文件夹中调用.NET可执行文件,然后将文件夹参数传递给另一个文件夹中存在的文件夹参数。它看起来像这样:
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%
这是将目录传递给批处理脚本中的应用程序的正确方法吗?我的应用程序似乎无法找到目录,我也不知道是否有办法在脚本中解决这些问题,或者这是否正确,因为它是正确的方式我第一次做了一个Windows批处理脚本。谢谢!
答案 0 :(得分:0)
应该是,但批处理对SET
语句中的空格敏感。 SET FLAG = N
将名为“FLAG Space ”的变量设置为值“ Space N”
语法SET "var=value"
(其中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 off在批处理期间关闭命令回显
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
从堆栈中弹回目录。