My Windows пакетный файл должен прочитать имена файлов и создать каталог, который называется в соответствии с 2-го имени файла к 5-ой букве:Перебор значений строк с использованием набора в Windows, CMD
for %%f in (.\*.txt) do (
set string=%%~nf
mkdir %string:~2,5%
)
Значение «строки 'не обновляется, т.е., то же самое на каждом шаге цикла. Как я могу его обновить?
Это CMD выход:
>for %f in (.\*.txt) do (
set string=%~nf
mkdir le3
)
>(
set string=file1
mkdir le3
)
>(
set string=file2
mkdir le3
)
A subdirectory or file le3 already exists.
>(
set string=file3
mkdir le3
)
A subdirectory or file le3 already exists.
Попробуйте консультационные сотни статей о SO о 'delayedexpansion'. По существу, '% var%' внутри кодового блока заменяется значением 'var', когда блок анализируется. Чтобы получить доступ к изменяющемуся значению в блоке, вы сначала загружаете вызов 'delayedexpansion' с помощью команды setlocal enabledelayedexpansion', а затем используйте'! Var! 'Для доступа к динамическому значению переменной. – Magoo
Благодарим вас за ответ. Я консультировался с несколькими сайтами, например. [link] (http://stackoverflow.com/questions/6679907/how-do-setlocal-and-enabledelayedexpansion-work) и придумал «SETLOCAL ENABLEDELAYEDEXPANSION для %% f в (. \ *. txt) do (set ! string! = %% ~ nf mkdir! string: ~ 2,5!) ', но замедленное расширение пока не работает. Есть ли у вас какие-либо советы, что не так? – Joan
'set! String! = %% ~ nf' должно быть' set string = %% ~ nf' - вы намерены установить переменную 'string', а не переменную' current content of string' – Magoo