如何在 FOR /F 批处理文件中查明和使用每行的最后一个标记

How to pinpoint and use the last token per line in FOR /F Batch file

我正在使用 FOR /F 读取 .csv 文件的行以执行 XCOPY 从一个位置到另一个位置的各种文件。 .csv 文件中的列包含源文件夹和目标文件夹以及文件名的信息。

COL1    COL2    COL3    COL4    COL5
1234    From1   Out1    Out2
4321    From2   Out3
1111    From3   Out4    Out5    Out6    
4444    From4   Out7    Out8

我的问题是每行可能存在多个输出文件夹名称(如上图 Out1-Out8 所示),我只想使用每行的最后一个。
我目前的批处理文件如下:

SET "count=1"
for /f "skip=1 tokens=1-5 delims=," %%G in (c:\test\INPUT_LIST.csv) do (
IF exist s:\destination\%%I\%%G.txt (
set /a "count+=1"
echo f | XCOPY c:\source\%%G\%%H\Source_Doc.txt s:\destination\%%I\%%G_!count!.txt /Y
) else (
echo f | XCOPY c:\source\%%G\%%H\Source_Doc.txt s:\destination\%%I\%%G.txt /Y )
)

这将检查目标文件夹中是否已经存在文件,然后将源文件从源文件夹复制到目标文件夹,重命名文件,如果存在则在文件名后附加一个递增数字目标文件夹中已存在副本。

同样,我的问题是我想使用每行中的最后一个标记作为目标文件夹的名称,但我目前只使用第 3 列中的值 (%%I)

我该如何做到这一点?

读取每一行并在另一个for中解析它以获取最后一个元素:

@echo off
setlocal enabledelayedexpansion

REM get one line after the other:
for /f "skip=1 delims=" %%a in (x.csv) do (

  REM get last element of this line (%%a):
  for %%b in (%%a) do set last=%%b

  REM using this last element of this line:
  echo doing useful things with !last! here...

REM continue with the FOR /F (process next line)
)