我有一个包含三列的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文件中没有条目为止。
请注意,这是我的第一批,我对编码没有太多经验。
感谢您的帮助
答案 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"
)