2

次の問題についてサポートが必要です。

CMDコマンドを使用して、バッチファイル内のコンポーネントにファイルパスを分割したいと思います。

まず、バッチファイルが配置されているパスを特定します。

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のエコーは正常に機能しますが、連結ステートメントではエラーのようです。引用符と「!」で遊んだ しかし、何も機能しません。

それに関するどんな助けも高く評価されます

4

1 に答える 1

3

バックスラッシュを 2 つだけ使用する必要がある場合は、replace を使用する方が簡単です。

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 に答える