windows - Windows 批处理 `for` 循环中没有换行符的回显

标签 windows batch-file cmd

请注意:这个问题不是关于如何在没有换行符的情况下回显。它即将在没有换行符的情况下传递一个变量,并将结果存储在另一个变量中。请不要将此问题标记为与仅回答如何删除换行符的其他问题重复!

我有一个变量a,我想将它传递给一个程序(为了这个例子,让我们使用more),它的结果应该存储到另一个变量 b。这是为了防止创建临时文件。将其他问题的一些答案放在一起,可以通过以下方式实现:

FOR /f "tokens=*" %%t IN ('ECHO %a% ^| MORE') DO SET b=%%t

这行得通——但会在我的变量上添加另一个换行符!因此,我尝试了您在 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

它总是会说 The syntax of the command is incorrect. 我错过了什么?请帮助我!

最佳答案

如果你运行你的命令

FOR /f "delims=" %%t IN ('^<NUL SET /p="%a%" ^| more ') DO SET "b=%%t"

使用 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"

第一个转义等号。第二个引用它。

关于windows - Windows 批处理 `for` 循环中没有换行符的回显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29006253/

相关文章:

java - 在命令提示符下运行 jar 文件时显示错误 "JavaFX runtime components are missing, and are required to run this application"

powershell - 将值从 cmd 传递到 npm 脚本

windows - 从 ping 获取主机名并将结果存储到文本

postgresql - 在批处理文件中运行命令

batch-file - 在Windows Server中获取进程的pid

java - 调用 Java Web Service 时包含 .bat 扩展名

windows - 如何从 Bash for Windows 10 运行 .bat 或 .cmd 文件

windows - socket 乒乓性能

windows - 即使 Windows 在缓存中有条目(ARP 表),也会发送 ARP 请求

python - 无法访问Locust WebInterface "ERR_CONNECTION_REFUSED"