0

我有一个包含三列的 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循环从第二行开始读取并将内容放入%%a、%%b和%%c。如果 B 是,则应将可在 %%a 下找到的文件复制到路径加上来自 %%c 的文件夹。

如果这样做了,或者如果 %%b 为 NO,则 for 循环应该从第 3 行继续,直到 csv 文件中不再有条目。

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

谢谢你的帮助

4

2 回答 2

2

尝试这个:

for /F "skip=1 tokens=1-3 delims=," %%a IN (C:\somewhere\sourcefile.csv) DO (
    如果 /i "%%b"=="是" (
        设置“文件=%%~a”
        设置“文件夹=%%~c”

)

如果未定义文件 goto:eof
复制 /d /v "%file%" "C:\somwhereelse\%folder%"
于 2013-07-04T15:41:32.937 回答
0

您需要使用call :COPY ...而不是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 回答