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
从堆栈中弹出目录。
我有一个来自一个文件夹的批处理脚本 运行,它调用另一个文件夹中的 .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
从堆栈中弹出目录。