У меня есть несколько файлов с одинаковой схемой именования. Например, четыре файла называются «num_001_001.txt», «num_002_001.txt», «num_002_002.txt», «num_002_003.txt»
Первый набор чисел представляет, из какого «пакета» он, а второй набор чисел просто используется, чтобы отличать их друг от друга. Таким образом, в этом примере у нас есть один файл в пакете 001 и три файла в пакете 002.
Я пишу пакетную команду Windows Vista, чтобы взять все файлы и переместить их в свои собственные каталоги, где каждый каталог представляет отдельный пакет. Поэтому я хочу переместить все файлы для пакета 001 в каталог "001" и все для 002 в каталог "002"
Я успешно написал сценарий, который будет перебирать все текстовые файлы и отображать их. Я также написал скрипт, который переместит один файл в другое место, а также создаст каталог, если он не существует.
Теперь я понял, что мне нужно будет использовать подстроки, поэтому я использовал синтаксис% 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, и все это было имя последнего пакета. Я предполагаю, что что-то не так с тем, как я настраиваю вещи.
У меня есть разные обходные пути для выполнения работы, но я сбит с толку, почему такая простая концепция не сработает.