具有不同变量数量的CSV的FOR / F处理

时间:2014-10-17 18:47:08

标签: for-loop cmd batch-processing

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

[当前位置的完整路径],new_dir_1,new_subdir_2,[new_subdir_3],[etc],

过去我使用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=* ....

也失败了 - 我的理解是"令牌= *"会按照逗号分隔的术语创建一个令牌,但也许我有错误?相反,它似乎将整行作为一个标记。

有没有办法修改我的"做"命令只根据需要创建目标路径(即,如果new_subdir_3不存在,则路径应为" d:\ new_dir1 \ new_subdir_2 \"而不是" d: \ new_dir1 \ new_subdir_2 \"?)

感谢。

1 个答案:

答案 0 :(得分:0)

tokens=*tokens=1,*无效。它将设置一个aditional可替换参数,该参数将包含最后一个必需标记之后的其余行。也就是说,第一种情况下的所有线路或第二种情况下的第二种线路的所有线路。但是只为*

定义了一个变量/可替换参数

有一种简单的方法可以解决您的问题。只需使用aditional 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\.生成的完整路径,但在此过程中将删除所有双反斜杠。