我成功了分裂 %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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 语法括号- 使用括号/方括号对表达式进行分组
答案2
您的t
路径不应存储特殊控制字符,如、 、"
等&
。如果是这样,那么您只需替换对解析器有干扰的结尾字符即可:|
%
)
(echo %t:)=^)%) > a