0

これが私のフォルダーAのフォルダー構造です

A\Temp\folder1\c\one.txt
A\Temp\folder2\c\one.txt
A\Temp\folder3\c\one.txt

そして別のフォルダB

B\folder1.ext\c\   Note: the extension is part of its folder name.
B\folder2.ext\c\
B\folder3.ext\c\

私がやりたいことは、すべての one.txt を A\Temp*\c\one.txt から C*\c\ にコピーすることです

私が今試しているのは:

for /D %%b in (TEMP\*) do (
set folder=%%~nb
ECHO %%~b
ECHO Copying %%b
ECHO.
ECHO.
COPY %%b\c\one.txt B\%folder%.ext\c

%folder% に保存されているフォルダ名 gettig は、毎回最後のフォルダ (ここでは folder3) の名前に過ぎません。つまり、folder1 の one.txt は C\folder3 にコピーされ、その他はコピーされません (システムは指定されたファイルを見つけます)

4

1 に答える 1

0

ループ変数をループ内の別の変数に割り当てたい場合は、遅延展開を有効にする必要があります。

setlocal EnableDelayedExpansion
for /D %%b in (TEMP\*) do (
  set folder=%%~nb
  ECHO %%~b
  ECHO Copying %%b
  ECHO.
  ECHO.
  COPY %%b\c\one.txt B\!folder!.ext\c
)
endlocal

それ以外の場合は、ループ変数を使用する必要があります。

for /D %%b in (TEMP\*) do (
  COPY %%~b\c\one.txt B\%%~nb.ext\c
)

この理由は、展開が遅延されていない場合、変数 ( %folder%) は解析時、つまりコマンド (ブロック) が読み取られるときに展開されるためです。遅延展開を有効にすると、変数 ( !folder!) は実行時に展開されます。

于 2013-04-09T09:35:21.907 に答える