windows批处理脚本指向正确的路径

时间:2015-02-06 16:33:29

标签: batch-file

我有一个批处理脚本,我从一个文件夹运行,即在另一个文件夹中调用.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批处理脚本。谢谢!

1 个答案:

答案 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从堆栈中弹回目录。