Dav*_*vid 101 windows command-line escape-characters
例如,不带引号的此命令的替代方法是什么:
CD "c:\Documents and Settings"
Run Code Online (Sandbox Code Playgroud)
我不想使用引号的全部原因是这个命令确实有效:
SVN add mypathname\*.*
Run Code Online (Sandbox Code Playgroud)
但此命令不起作用:
SVN add "mypathname\*.*"
Run Code Online (Sandbox Code Playgroud)
问题是,当我更改带有空格的路径的 mypathname 时,我需要引用整个内容。例如:
SVN add "c:\Documents and Settings\username\svn\*.*"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这个时,我收到以下错误消息:
svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
Run Code Online (Sandbox Code Playgroud)
bar*_*lop 63
它几乎对我都有效,但是您是否尝试过 line5 .. 用插入符号 (^) 转义空格
1 C:\Documents and Settings\user>cd ..
2 C:\Documents and Settings>cd ..
3 C:\>cd Documents and Settings
4 C:\Documents and Settings>cd..
5 C:\>cd Documents^ and^ Settings
6 C:\Documents and Settings>cd..
7 C:\>cd C:\documents and settings
8 C:\Documents and Settings>cd..
9 C:\>
Run Code Online (Sandbox Code Playgroud)
或者例如在下面插入符号真正发挥作用的地方。
从下面看,插入符号可能是您的答案,请参见下面的第 3 行。
1 C:\>"c:\Documents and Settings\a.bat"
gaga
2 C:\>c:\Documents and Settings\a.bat
'c:\Documents' is not recognized as an internal or external command,
operable program or batch file.
3 C:\>c:\Documents^ and^ Settings\a.bat
gaga
C:\>
Run Code Online (Sandbox Code Playgroud)
Kit*_*son 42
我发现在位置的一部分周围加上引号是有效的。在你的情况下:
SVN add C:\"Documents and Settings"\username\svn\*.*
Run Code Online (Sandbox Code Playgroud)
虽然这使用了引号,但要注意的重要一点是星号在引号之外,因此它们仍然可以正常工作。
Pac*_*ier 30
尽管答案给人一种它有效的错觉,但事实是您不能将空格潜入通常的 cmd 参数中。这很容易证明:
将“ echo %1
”另存为test.bat
. 这个批处理文件将输出 cmd 传递给我们的第一个参数。
现在,尝试运行test.bat
,将 的值设置%1
为foo bar
。(请注意,foo
和之间有一个空格字符bar
。)
试错了几年,意识到没有办法做到。人们会建议使用 逃避^
,但test.bat foo^ bar
不会输出foo bar
。
所以,没有办法得到 output foo bar
,我们能得到的最接近的是 running test.bat foo" "bar
which productsfoo" "bar
或 running test.bat "foo bar"
which products "foo bar"
。
现在,其他答案的理由似乎工作是因为cd
确实它自己额外的解析,从常用的参数传递的行为(通常发散%1
,%2
,%3
在典型的批处理文件和等)。
例如,考虑特殊的命令:
cd c:\documents and settings \some folder with spaces
Run Code Online (Sandbox Code Playgroud)
为什么有效?这是因为cd
它自己做了一些相当于将 7 个常用参数合并为一个逻辑参数的操作。根据 cmd 参数传递规范,我们看到 7 个参数:
c:\documents
and
settings
\some
folder
with
spaces
好像cd
已将所有 7 个参数合并为一个逻辑参数,执行类似于 的操作array.join(" ")
,从而生成路径:
c:\documents and settings \some folder with spaces
Run Code Online (Sandbox Code Playgroud)
请注意,此行为是特有的cd
只有(和其他一些功能)。它与通常的参数传递无关。
的确,cd
还有一个特点。还记得我们上面说过我们无法获得输出foo bar
吗?我们可以获得的最接近的输出是通过运行:
test.bat foo" "bar
Run Code Online (Sandbox Code Playgroud)
产生foo" "bar
, 或:
test.bat "foo bar"
Run Code Online (Sandbox Code Playgroud)
产生"foo bar"
, 或:
test.bat "foo "bar
Run Code Online (Sandbox Code Playgroud)
产生"foo "bar
, 或:
test.bat foo" bar"
Run Code Online (Sandbox Code Playgroud)
产生foo" bar"
, 或:
test.bat "foo b"ar
Run Code Online (Sandbox Code Playgroud)
产生"foo b"ar
, 或:
test.bat fo"o bar"
Run Code Online (Sandbox Code Playgroud)
产生fo"o bar"
, 或:
test.bat fo"o ba"r
Run Code Online (Sandbox Code Playgroud)
产生fo"o ba"r
, 或:
test.bat "fo"o" bar"
Run Code Online (Sandbox Code Playgroud)
产生"fo"o" bar"
, 或:
test.bat "f""o""o"" ""b""a""r":
Run Code Online (Sandbox Code Playgroud)
它产生"f""o""o"" ""b""a""r"
,甚至:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
Run Code Online (Sandbox Code Playgroud)
产生""""f"""o""""o"" ""ba"""r""""""""""
.
上面所有的例子都有一个相似之处,那就是它们会foo bar
在我们修剪掉"
字符后产生。cd
的作者一定也意识到了这一点……如果我们从cd
的特殊行为中推断出它会删除"
它接收到的所有内容,从而允许所有这些命令工作:
cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs
小智 9
短文件名似乎轻而易举。
"E:\Progra~1\Java\Eclipse\eclipse.exe" -vmargs -Xms1024m -Xmx2048m
为了提高内存.. ;)
归档时间: |
|
查看次数: |
326721 次 |
最近记录: |