如何将带有空格的目录路径传递到.cmd脚本中?

时间:2019-02-06 22:07:42

标签: batch-file path spaces util.cmd

我试图将两个参数传递到我的.cmd脚本中,以为arg1创建一个文件夹,并为arg2定义一个源目录。源目录是“共享文档”。问题是,如果没有声明路径不存在,则无法将空格或通配符传递给参数。我也尝试过使用引号和相同的结果传递它。

@set dirYr=%1
@set dir1=%2

@set connectionroot=https://somewhere.com/sites/foo_bar/foobar/FooBar::Source path
@set sourcepath=https://somewhere.com/sites/foo_bar/foobar/FooBar\%dir1%::Destination path
@set destinationpath=\\foo\bar\%dirYr%\%dir1%

::Check commandline argument to make sure that %2 is present.
IF NOT DEFINED dir1 (echo USAGE: foo_bar.cmd ^<YYYY^>^<Directory^|Filename^>GOTO badexit)

任何有关如何使脚本接受带空格的参数的指导,将不胜感激。我知道参数需要用引号引起来,我只是不知道在插值到变量之前要删除引号的语法

1 个答案:

答案 0 :(得分:1)

假设您正在执行这样的批处理文件:

myscript.bat "arg 1" "arg 2"

使用这些命令行参数和定义变量的最佳做法如下所示。

@echo off
set "dirYr=%~1"
set "dir1=%~2"

set "connectionroot=https://somewhere.com/sites/foo_bar/foobar/FooBar"
set "sourcepath=https://somewhere.com/sites/foo_bar/foobar/FooBar\%dir1%"
set "destinationpath=\\foo\bar\%dirYr%\%dir1%"

::Check commandline argument to make sure that %2 is present.
IF NOT DEFINED dir1 (echo USAGE: foo_bar.cmd ^<YYYY^>^<Directory^|Filename^>GOTO badexit)

现在请记住,如果您正在使用带空格的变量,则在使用它们时也需要引用这些变量。最佳做法是始终使用引号,而不管是否需要引号。