For loop 用于处理变量数量不同的CSV

For loop 用于处理变量数量不同的CSV,for-loop,cmd,batch-processing,For Loop,Cmd,Batch Processing,我正在尝试编写一个批处理脚本,将数千个文件夹从当前位置移动到新位置。我有一个带有原始/新位置信息的CSV,例如: [当前位置的完整路径]、新分区1、新分区2、[新分区3]、[等] 在过去,我很幸运地使用FOR/F,这就是我在这里尝试的 for /f "tokens=1-4 delims=," %g in (text_file.csv) do xcopy "%%g" "d:\%%h\%%i\%%j" /e /i /y 当变量没有足够的标记时失败,并且在目标路径中有两个尾随的反斜杠 for /f

我正在尝试编写一个批处理脚本,将数千个文件夹从当前位置移动到新位置。我有一个带有原始/新位置信息的CSV,例如:

[当前位置的完整路径]、新分区1、新分区2、[新分区3]、[等]

在过去,我很幸运地使用FOR/F,这就是我在这里尝试的

for /f "tokens=1-4 delims=," %g in (text_file.csv) do xcopy "%%g" "d:\%%h\%%i\%%j" /e /i /y
当变量没有足够的标记时失败,并且在目标路径中有两个尾随的反斜杠

for /f "tokens=* ....
同样失败-我的理解是“tokens=*”将为每个逗号分隔的术语创建一个标记,但可能我错了?相反,它似乎将整行作为一个标记

是否有办法修改我的“do”命令,只创建必要深度的目标路径(即,如果新的分区3不存在,路径应该是“d:\new\u dir1\new\u subdir\u 2\”而不是“d:\new\u dir1\new\u subdir\u 2\”


谢谢。

代币=*或
代币=1,*
不能像您想象的那样工作。它将设置一个传统的可替换参数,该参数将包含最后一个所需令牌之后的行的其余部分。也就是说,第一种情况下的所有线或第二种情况下从第二条线到终点的所有线。但是对于
*

有一个简单的方法来解决你的问题。只需使用一个传统的
for
循环来处理有问题的路径

for /f "tokens=1-4 delims=," %%g in (text_file.csv) do (
    for %%a in ("d:\%%~h\%%~i\%%~j\.") do  xcopy "%%~g" "%%~fa" /e /i /y
)

%%~fa
将返回由
d:\%%~h\%%~i\%%~j\.
生成的完整路径,但在此过程中所有的双反斜杠都将被删除。

这非常完美。非常感谢。您是否有%%~fa等文档的链接?@Josh,
for/?
将为您提供所需的所有信息。再次感谢。