Batch file CMD中的转义输出

Batch file CMD中的转义输出,batch-file,cmd,Batch File,Cmd,如果我运行返回的某个字符带有&或其他具有特殊含义的字符,并且我尝试在脚本中使用它,我将如何转义它 例如,如果我与同一台计算机上的某个人共享一个本地帐户,并且我的用户名上写着John&Matt。将批处理文件放入具有以下内容的桌面目录: @ECHO OFF echo %~dp0 C:\Users\John The system cannot find the path specified. 它将返回如下内容: @ECHO OFF echo %~dp0 C:\Users\John The sys

如果我运行返回的某个字符带有&或其他具有特殊含义的字符,并且我尝试在脚本中使用它,我将如何转义它

例如,如果我与同一台计算机上的某个人共享一个本地帐户,并且我的用户名上写着John&Matt。将批处理文件放入具有以下内容的桌面目录:

@ECHO OFF
echo %~dp0
C:\Users\John
The system cannot find the path specified.
它将返回如下内容:

@ECHO OFF
echo %~dp0
C:\Users\John
The system cannot find the path specified.
从那一刻起,如果我继续下去,整个剧本就会中断。 如果有人知道一个方法,使整个路径出现,我将不胜感激

编辑:我之前没有充分说明这一点。很抱歉。不是很擅长解释,但是如果我尝试在变量中使用%%dp0,并在上面叠加更多的东西,比如

SETLOCAL
set loc=%~dp0
rename "%~dp0Dir\Dir1\Dir2\File.txt" "Something.txt"
如果我在声明一个变量来解决这个问题时,再加上一组引号,可能会混淆rename命令

我试图创建的批处理文件基本上删除了批处理文件所在的一个文件,将其替换为位于批处理文件所在目录内的子文件夹中的另一个文件,并将其重命名为其他文件

@ECHO OFF
echo %dp0
将返回dp0-我猜您的意思是%%dp0;-)

但是,
echo“%~dp0”
将输出
C:\Users\John&Matt\…

顺便说一下,它是\而不是/

窗口:\

Unix/Linux:/


我不是学究,这有时会导致严重的问题(例如)。

如果您希望可靠地响应值而不加引号,那么您可以使用以下策略之一:

@echo off
:: Use a FOR loop
for %%F in ("%~dp0") do echo %%~F

:: Use delayed expansion.
:: Note that delayed expansion must be enabled after assignment of fullPath,
:: else any ! within path will be corrupted during the assignment.
set "fullPath=%~dp0"
setlocal enableDelayedExpansion
echo !fullPath!

有点匆忙,没有修正错误。很抱歉。我会把它编辑掉的。事实上,这确实修复了错误。如果只是echo,用引号括住变量就可以了。很抱歉我没有澄清,但我需要在变量中使用%%dp0。加引号会把变量搞砸,因为我需要在它给我的路径上加更多的东西。例如,我这样做:设置loc=%~dp0,然后,我需要输入%loc%Dir1\Dir2\Program。exe@RoastChicken好的,在这种情况下,在没有看到更多代码的情况下帮助您并不容易。根据您使用字符串的具体操作,您必须以不同的方式处理它。请给我们看更多的代码。最糟糕的情况是:简单地用lets say~或其他东西替换&character,执行字符串生成操作,并在结尾处将其替换回&character。我不理解您的编辑。为什么要将
loc
设置为
%~dp0
?在这种情况下,您可以将
%CD%
设置为
%~dp0
,然后使用
Ren Dir\Dir1\Dir2\File.txt“Something.txt”“
。我不熟悉创建批处理文件,所以我不知道%CD%做了类似的事情。当我尝试创建一个新的批处理文件来处理大量目录时,我会记住这一点。使用以下语法:
设置“loc=%~dp0”
--引号不会成为此处值的一部分,但某些特殊字符(如
&
)会正确地隐藏在
cmd
中。。。