我有一个for循环读取来自“temp”文件的行。 它应该读取每行,然后继续为文件中的每个名称创build一个目录。 但是,在移动到第二行之前,它会先读取文件的第一行两行。 所以我得到一个错误说该文件夹已经存在。
目前,文件“temp”包含两个条目:
folder1 folder2
代码很简单:
for /F "tokens=*" %%i in (temp) do ( set pstname=%%i echo the folder name is set to %pstname% mkdir C:\output\%pstname% )
当我运行这个时,它从“temp”文件读取第一行, folder1 ,并创build目录c:\ output \ folder1 。 所以我期望在下一次迭代中,variablespstname将被设置为“temp”文件中的第二行(应该设置为folder2 )
但是那不是发生了什么。 该循环读取两次fodler1并尝试再次创buildfolder1文件夹。 如果我继续使用脚本,它最终会从“temp”文件( folder2 )中读取第二行并创build它。 所以脚本几乎可以工作。
问题:我做错了什么? 在进入下一行之前,它读取文件“temp”中的第一行两次?
有没有我必须使用的下一个命令? 我的逻辑有什么问题?
再看一遍。 第二个目录不被创建。
你是“延期扩张”问题的受害者。 从FOR
到结束圆括号的ENTIRE命令被解析,并且当时,任何%var%都被var
的值代替,就像在PARSED那一行那样。 只有这样才行EXECUTED。
因此,运行你的codefrag一次,而pstname
站在pstname
被用作目标目录名 – 可能是空的(没有你的代码的其余部分,没有办法告诉)。
因此执行什么(假设pstname
是空的)
for /F "tokens=*" %%i in (temp) do ( set pstname=%%i echo the folder name is set to mkdir C:\output\ )
但是, pstname
将从文件的最后一行获取名称。
如果你再次运行代码而不清除pstname
,那么你会得到
for /F "tokens=*" %%i in (temp) do ( set pstname=%%i echo the folder name is set to folder2 mkdir C:\output\folder2 )
这将被执行两次 – 每次在temp
行 – 并创建该direcory。
对这个问题有很多的参考文献。 最简单的治疗方法是
for /F "tokens=*" %%i in (temp) do ( echo the folder name is set to %%i mkdir "C:\output\%%i" )
(注意兔子的耳朵周围的名字将被创建 – 占名字空间)