如何在 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)
)
我正在使用 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)
)