更新

更新

我成功了分裂 %PATH%像这样分成多行

set t=%PATH:;=^&echo.%

然后这个显示器每条路径都很好地放在新行中,正如我想要的那样:

echo %t%

然而当我想变量到文件中

echo %t% >paths.txt

仅最后一行写入文件。

我究竟做错了什么?

更新

事实证明,该set t=%PATH:;=^&echo.%命令并没有用;换行符替换字符(正如我所说的那样),而是&echo.‌​用稍后执行的命令替换它。

答案1

我究竟做错了什么?

你需要用和包围echo最后(一个)

(echo %t%) > paths.txt

更正的批处理文件(test.cmd):

@echo off
setlocal
set t=%PATH:;=^&echo.%
echo %t%
(echo %t%) > paths.txt
:endendlocal

使用示例:

> test
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\apps\WSCC\Sysinternals Suite
C:\apps\WSCC\NirSoft Utilities
C:\apps\Calibre\
C:\apps\Git\cmd
C:\apps\Git\mingw64\bin
C:\apps\Git\usr\bin
C:\apps\nodejs\
C:\Users\DavidPostill\AppData\Roaming\npm
> type paths.txt
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\apps\WSCC\Sysinternals Suite
C:\apps\WSCC\NirSoft Utilities
C:\apps\Calibre\
C:\apps\Git\cmd
C:\apps\Git\mingw64\bin
C:\apps\Git\usr\bin
C:\apps\nodejs\
C:\Users\DavidPostill\AppData\Roaming\npm

更简单的解决方案

此解决方案不需要对路径中的任何括号进行转义。

测试.cmd:

@echo off
setlocal
for %%i in ("%path:;=";"%") do (
  echo %%~i >> paths.txt
)
:endendlocal

从命令行:

for %i in ("%path:;=";"%") do echo %~i >> paths.txt

进一步阅读

答案2

您的t路径不应存储特殊控制字符,如、 、"&。如果是这样,那么您只需替换对解析器有干扰的结尾字符即可:|%)

(echo %t:)=^)%) > a

相关内容