我尝试编写批处理脚本,将数千个文件夹从当前位置移动到新位置。我有原始/新位置信息的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 \"?)
感谢。
答案 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\.
生成的完整路径,但在此过程中将删除所有双反斜杠。