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" "barwhich 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:\documentsandsettings\somefolderwithspaces好像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
为了提高内存.. ;)