2

我需要帮助解决以下问题:

我想使用 CMD 命令将文件路径拆分为批处理文件中的组件。

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

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

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

  • C:
  • 某个文件夹
  • 其他文件夹

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

  • 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 工作正常,但在连接语句中似乎是一个错误。我玩弄引号和“!” 但没有任何效果。

对此的任何帮助都将受到高度赞赏

4

1 回答 1

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!\\
)
于 2012-09-21T10:09:26.543 回答