Windows 编写包含反斜杠的文本字符串时,会出现变量赋值问题

Windows 编写包含反斜杠的文本字符串时,会出现变量赋值问题,windows,batch-file,cmd,Windows,Batch File,Cmd,我希望bat文件将此文本\Music\TheArchive\Aeph&Neonlight\Aeph&Neonlight-Space Truckers-7b-173.26.mp3写入现有文本文件baseplaylist.m3u 到目前为止,我有: set "texty=\Music\TheArchive\Aeph & Neonlight\Aeph & Neonlight - Space Truckers - 7b - 173.26.mp3" echo %texty% >>

我希望bat文件将此文本
\Music\TheArchive\Aeph&Neonlight\Aeph&Neonlight-Space Truckers-7b-173.26.mp3
写入现有文本文件
baseplaylist.m3u

到目前为止,我有:

set "texty=\Music\TheArchive\Aeph & Neonlight\Aeph & Neonlight - Space Truckers - 7b - 173.26.mp3"
echo %texty% >>C:\Music\Playlists\baseplaylist.m3u

但它不起作用。我知道问题是由于我试图复制的文本中的字符造成的,但我不知道如何克服这个问题。

反斜杠与您的问题无关。变量的赋值也没有问题。:-)

您的问题是
&
字符-复合命令运算符允许您在同一行输入上运行多个命令。您希望
&
是一个文本,但当您尝试回显它时,它被视为一个运算符。例如,
echo this&echo that将两行输出打印到屏幕上:“this”后跟“that”

批处理行必须先进行分析,然后才能执行。解析器必须识别命令和运算符。
%texty%
的扩展发生在解析命令和运算符之前,因此解析器认为
&
之后的下一个标记是命令


有许多特殊字符可能导致类似问题:
|
问题在于运算符&,在这种情况下,您需要展开变量或替换运算符,或用另一个双引号括住“echo”字符串。。。但您的解决方案非常简单:

set "texty=\Music\TheArchive\Aeph & Neonlight\Aeph & Neonlight - Space Truckers - 7b - 173.26.mp3"
<nul Set /P "string=%TEXTY%" >>C:\Music\Playlists\baseplaylist.m3u
set“texty=\Music\TheArchive\Aeph&Neonlight\Aeph&Neonlight-spacetruckers-7b-173.26.mp3”
>C:\Music\Playlists\baseplaylist.m3u
PS:使用SETLOCAL ENABLEDELAYEDEXPANSION在玩文件名时是一种不好的做法(特别是当文件名包含字符),因此请尝试永远不要使用扩展,所有操作都可以在不扩展变量(all)的情况下完成,启用delayedexpansion是完成大多数事情的简单方法,但不是唯一方法


我希望这对您有所帮助。

SET/p是一个有趣的解决方案,尽管它有其局限性。通常情况下,文件名不会出现问题,但SET/P会从Vista和Windows 7的输出中删除前导空格。这样使用时,不需要变量名<代码>我强烈不同意您延迟扩展的建议。延迟扩展对于编写健壮高效的批处理代码来说是一个非常宝贵的工具。唯一需要担心的重要问题是当扩展包含
的变量时启用延迟扩展时-在这种情况下不是问题。如果你想讨论延迟扩张的利弊,那么我很乐意参加一个聊天环节。非常棒的家伙。这种改变是一种享受。我知道这很简单。刚开始的时候很难。非常感谢您的帮助!:)@德本汉姆1号。我不需要争论任何事情,因为我多年的经验告诉我们,我所说的关于赛洛的一切。。。如果你同意或不同意,这就是现实。2.set/P仅在win Vista/7/8中修剪第一个Black空格,例如在XP中不修剪,并且“texty”变量在开始时没有空格,因此。。。一切都很好。拜希电子黑客。我一直在使用该代码,并发现了一个以前没有的问题。使用带有双>>符号的echo命令时,文本始终写入目标文件中的新行。您提出的代码更改似乎一直在将结果写入目标文件中的最后一行。是否可以对代码行进行一些更改,使其始终将文本写入目标文件中的新行。我一直想弄明白,但一事无成。谢谢:)非常感谢dbenham抽出时间详细解释这一点。非常感谢,伙计,嘿,德本汉姆。我一直在使用该代码,并发现了一个以前没有的问题。使用带有双>>符号的echo命令时,文本始终写入目标文件中的新行。您提出的代码更改似乎一直在将结果写入目标文件中的最后一行。是否可以对代码行进行一些更改,使其始终将文本写入目标文件中的新行。我一直想弄明白,但一事无成。谢谢:)@user1887696-我怀疑你在使用电子黑客的建议。我的建议是,假设现有文件的最后一行以
(windows上的行尾)结尾,则将向该文件写入一行完整的文本。
this
that
"this & that"
this & that
set "texty=\Music\TheArchive\Aeph ^& Neonlight\Aeph ^& Neonlight - Space Truckers - 7b - 173.26.mp3"
setlocal enableDelayedExpansion
set "texty=\Music\TheArchive\Aeph & Neonlight\Aeph & Neonlight - Space Truckers - 7b - 173.26.mp3"
echo !texty! >>C:\Music\Playlists\baseplaylist.m3u
set "texty=\Music\TheArchive\Aeph & Neonlight\Aeph & Neonlight - Space Truckers - 7b - 173.26.mp3"
<nul Set /P "string=%TEXTY%" >>C:\Music\Playlists\baseplaylist.m3u