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

windows batch script point to proper path

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

应该是,但是批处理对 SET 语句中的空格敏感。 SET FLAG = N 将名为 "FLAGSpace" 的变量设置为值“SpaceN”

语法 SET "var=value"(其中值可能为空)用于确保分配的值中不包含任何杂散的尾随空格。 set /a 可以放心使用 "quoteless".

只要文件名或目录名中有空格,这一点就很重要。

我建议做一些小改动:

@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" - 通常需要引号 not,即使 "spaces in pathnames" 但 may 对于奇怪的路径名是必需的(比如那些包含 &

  • "%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 从堆栈中弹出目录。