我有许多具有相同命名方案的文件。作为示例,四个文件被称为“num_001_001.txt”,“num_002_001.txt”,“num_002_002.txt”,“num_002_003.txt”windows批处理文件:for循环中的设置变量
第一组数字表示来自哪个“包”第二组数字仅用于区分它们。所以在这个例子中,我们在包001中有一个文件,在包00中有三个文件。
我正在编写一个windows vista批处理命令来获取所有文件并将它们移动到它们自己的目录中,其中每个目录代表不同的包。所以我想将包001的所有文件移动到目录“001”,并将002的所有文件移动到目录“002”中
我已经成功编写了一个脚本,它将迭代所有txt文件并对其进行回显。我还写了一个脚本,将一个文件移动到另一个位置,并创建该目录(如果该目录不存在)。
现在我认为我需要使用子字符串,所以我使用%var:〜start,end%语法来获取它们。作为测试,我写了这个验证我其实可以提取串并创建一个目录有条件
@echo off set temp=num_001_001.txt NOT IF exist %temp:~0,7%\ mkdir %temp:~0,7%
和它的作品。大。
然后我添加了for循环。
@echo off FOR /R %%X IN (*.txt) DO ( set temp=%%~nX echo directory %temp:~0,7% )
但是,这是我的输出:
directory num_002 directory num_002 directory num_002 directory num_002
有什么不对? vista是否不支持在每次迭代中重新分配变量? 这四个文件位于我的目录中,其中一个应创建num_001。我把003 004 005放在不同的文件中,全部都是最后一个包的名字。我猜测我的设置方式有问题。
我有不同的解决方法来完成工作,但我很困惑为什么这样一个简单的概念不会工作。
可能重复的[在for循环中初始化批处理文件变量](https://stackoverflow.com/questions/691047/batch-file-variables-initialized-in-a-for-loop) – 2017-11-09 12:16:01