avh*_*avh 1 windows cmd batch-file
请注意:这个问题不是关于如何在没有换行符的情况下回应.它将在没有换行的情况下管道变量,并将结果存储在另一个变量中.请不要将此问题标记为与仅回答如何删除换行符的其他问题重复!
我有一个变量a
,我想传递给一个程序(让我们more
为了这个例子使用),它的结果应该存储到另一个变量中b
.这是为了防止创建临时文件.从这里得到其他问题的一些答案,这可以通过以下方式实现:
FOR /f "tokens=*" %%t IN ('ECHO %a% ^| MORE') DO SET b=%%t
Run Code Online (Sandbox Code Playgroud)
哪个有效 - 但是会在我的变量上添加另一个换行符!所以我尝试了你在stackoverflow/superuser上找到的以下技巧来防止换行.如果你没有循环这样做,它们完美地工作!但是一旦你把它们放在循环中,它们就会失败:
FOR /f "tokens=*" %%t IN ('ECHO ^| SET /p="%a%" ^| MORE') DO SET b=%%t
FOR /f "tokens=*" %%t IN ('^<NUL SET /p="%a%" ^| MORE') DO SET b=%%t
Run Code Online (Sandbox Code Playgroud)
总会说The syntax of the command is incorrect.
我错过了什么?请帮我!
如果你运行你的命令
FOR /f "delims=" %%t IN ('^<NUL SET /p="%a%" ^| more ') DO SET "b=%%t"
Run Code Online (Sandbox Code Playgroud)
使用echo
ON,您将看到set
命令中的等号已经消失,解析器已将其删除,并留下错误的命令.
您有两种选择:
FOR /f "delims=" %%t IN ('^<NUL SET /p^="%a%" ^| more ') DO SET "b=%%t"
FOR /f "delims=" %%t IN ('^<NUL SET /p"=%a%" ^| more ') DO SET "b=%%t"
Run Code Online (Sandbox Code Playgroud)
第一个逃脱等号.第二个引用它.