我需要以下问题的帮助:
我想用DOS命令将DOS文件路径拆分成批处理文件中的组件。
首先,我确定批处理文件所在的路径:
set home=%~dp0 (e.g. C:\SomeFolder\OtherFolder\)
我需要的是将此字符串提取到:
并将这些组件重新连接到:
这有助于我循环通过文件路径的元素
set List=!home!
:ProcessListSource
FOR /f "tokens=1* delims=\" %%a IN ("!List!") DO (
if "%%a" NEQ "" (
echo %%a
)
if "%%b" NEQ "" (
set List=%%b
goto :ProcessListSource
)
)
循环工作正常,文件路径的组件正确回显。我认为通过简单的字符串连接更改echo语句很容易
if "%%a" NEQ "" (
set foo=%foo%%%a
set foo=%foo%\\
)
结果只是发人深省。只有反斜杠才会添加到变量中。我的错误在哪里?回应%% a工作正常,但在concate语句中似乎是一个错误。我玩弄了引号和'!'但没有任何作用。
对此有任何帮助表示高度赞赏
答案 0 :(得分:3)
如果你只需要加倍反斜杠,那么使用替换就更简单了。
set "home=%~dp0"
set "foo=%home:\=\\%"
echo %foo%
您的代码也可以运行:
但关键词是EnableDelayedExpansion
(就像每天一样)
这就是为什么%foo%
没有按预期扩展的原因。
在@echo off
setlocal EnableDelayedExpansion
并将连接块更改为
if "%%a" NEQ "" (
set foo=!foo!%%a
set foo=!foo!\\
)