DOS - 如何使用dos命令将文件路径拆分为其组件,并使用双反斜杠进行连接

时间:2012-09-21 09:48:15

标签: batch-file split command dos concat

我需要以下问题的帮助:

我想用DOS命令将DOS文件路径拆分成批处理文件中的组件。

首先,我确定批处理文件所在的路径:

set home=%~dp0  (e.g. C:\SomeFolder\OtherFolder\)

我需要的是将此字符串提取到:

  • C:
  • SomeFolder
  • OtherFolder

并将这些组件重新连接到:

  • 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语句中似乎是一个错误。我玩弄了引号和'!'但没有任何作用。

对此有任何帮助表示高度赞赏

1 个答案:

答案 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!\\
)