0

3 つの列を持つ csv ファイルがあります。1: は、コピーする必要があるファイルへのパスです。2: 1 のファイルをコピーする必要があるかどうかを示します。3: 1 のファイルをコピーするターゲットの場所のフォルダー名を指定します。

「パス」/はいまたはいいえ/「フォルダー名」

私が今まで持っているもの:

for /F skip=1 "tokens=1-3 delims=," %%a IN (C:\somewhere\sourcefile.csv) DO if %%b ==Yes GOTO copy "%%a" "%%c"

:COPY
copy /d /v "%%a" "C:\somwhereelse\%%c"

最初に、for ループが 2 行目から読み取りを開始し、コンテンツを %%a、%%b、%%c に配置します。B が「はい」の場合、%%a の下にあるファイルを、パスと %%c からのフォルダーにコピーする必要があります。

それが完了した場合、または %%b が NO の場合、for ループは csv ファイルにエントリがなくなるまで 3 行目に進む必要があります。

これは私の最初のバッチであり、コーディングの経験があまりないことに注意してください。

助けてくれてありがとう

4

2 に答える 2

0

call :COPY ...hereの代わりに使用する必要がありgoto COPYます。そうしないと、呼び出しがループに戻りません。また、呼び出されたルーチンで%1and%2の代わりに%%aandを使用する必要があります。%%cまた、変数から囲んでいる二重引用符を削除するために使用~すると、二重引用符がネストされてしまうことはありません。

@echo off
for /F skip=1 "tokens=1-3 delims=," %%a IN (C:\somewhere\sourcefile.csv) DO (
  if "%%b"=="Yes" call :copy "%%~a" "%%~c"
)
goto :eof

:COPY
copy /d /v "%~1" "C:\somwhereelse\%~2"

copyただし、ループ内でコマンドを使用する方がはるかに簡単です。

@echo off
for /F skip=1 "tokens=1-3 delims=," %%a in (C:\somewhere\sourcefile.csv) do (
  if "%%~b"=="Yes" copy /d /v "%%~a" "C:\somwhereelse\%%~c"
)
于 2013-07-04T10:34:20.127 に答える