For loop 用于处理变量数量不同的CSV
我正在尝试编写一个批处理脚本,将数千个文件夹从当前位置移动到新位置。我有一个带有原始/新位置信息的CSV,例如: [当前位置的完整路径]、新分区1、新分区2、[新分区3]、[等] 在过去,我很幸运地使用FOR/F,这就是我在这里尝试的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
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/?
将为您提供所需的所有信息。再次感谢。