批处理:csv文件中的完整路径和部分路径

批处理:csv文件中的完整路径和部分路径,csv,batch-file,copy,Csv,Batch File,Copy,我有一个包含三列的csv文件: 1:是必须复制的文件的路径。 2:告诉是否必须复制1中的文件。 3:提供文件从1复制到的目标位置的foldername “路径”/“是或否/”文件夹名称” 到目前为止我所拥有的: 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:\somwh

我有一个包含三列的csv文件: 1:是必须复制的文件的路径。 2:告诉是否必须复制1中的文件。 3:提供文件从1复制到的目标位置的foldername

“路径”/“是或否/”文件夹名称”

到目前为止我所拥有的:

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为“是”,则可在%%a下找到的文件应复制到路径加上来自%%c的文件夹

如果完成此操作,或者%%b为否,则for循环应继续执行第3行,直到csv文件中不再有条目为止

请注意,这是我的第一批,我不是太有经验的编码


感谢您的帮助

您需要在此处使用
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"
)
试试这个:

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%" 对于(C:\somewhere\sourcefile.csv)中的/F“skip=1 tokens=1-3 delims=,”%%a( 如果/i“%%b”==“是”( 设置“文件=%%~a” 设置“文件夹=%%~c” ) 如果未定义文件转到:eof 复制/d/v“%file%”C:\somWhere\%文件夹%