batch:完成和csv文件中的部分路径

时间:2013-07-04 10:24:40

标签: csv batch-file copy

我有一个包含三列的csv文件: 1:是必须复制的文件的路径。 2:告诉必须复制1中的文件。 3:给出目标位置的foldername,必须将来自1的文件复制到。

“path”/是或否/“文件夹名称”

到目前为止我所拥有的:

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循环开始用第二行读取并将内容放入%% a,%% b和%% c。如果B为yes,则可以将%% a下的文件复制到路径加上来自%% c的文件夹。

如果完成,或者%% b为NO,则for循环应继续第3行,直到csv文件中没有条目为止。

请注意,这是我的第一批,我对编码没有太多经验。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

试试这个:

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

)

if not defined file goto:eof
copy /d /v "%file%" "C:\somwhereelse\%folder%"

答案 1 :(得分:0)

您需要在此处使用call :COPY ...而不是goto COPY,否则呼叫将不会返回循环。您还必须在被调用例程中使用%1%2代替%%a%%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"
)