![]() |
Как работать с переменной внутри цикла FOR?
Подскажите, пожалуйста. Не могу понять, что происходит.
Мне нужно, чтобы при каждой итерации в цикле for (кусок кода ниже) переменная j увеличивалась на 1. Но даже присваивание ей не работает: на каждом шаге получаю "before: 1, after: 1". Что я делаю не так? Код:
SET j=1 |
Переменные в цикле заключите в восклицательные знаки (!) вместо знаков процента (%), а в начало скрипта добавьте Setlocal EnableDelayedExpansion
Примерно так: Код:
Setlocal EnableDelayedExpansion |
Или без EnableDelayedExpansion так:
Код:
@echo off |
Большое спасибо!
И то, и другое сработало. |
Товарищи знатоки, устал пытаться реализовать такую штуку, что бы указанный логин разбирался по буквам в цикле
мне надо из admin получить a d m i n если сделать так set login=admin setlocal enabledelayedexpansion SET j=0 for /L %%i in (1,1,5) do ( ping -n 1 -w 200 192.168.254.254 >nul SET /a j=j+1 @echo after !j! echo !login:~0,%%i! ) endlocal то получаю a ad adm admi admin что собственно и логично... А вот что бы получить что мне надо по идее надо бы засунуть переменную j в переменную login тобиш вот так echo !login:~!j!,%%i! вот тут то и загвоздка... Очень прошу помочь. Заранее спасибо. |
dimitrioglo,
Цитата:
Код:
@Echo Off Код:
@Echo Off |
Спасибо огромное.!
Мне где то даже стыдно)) решение очень красивое, чето я стормозил))) |
Не плохо продвинулся в своей задаче, но опять ступор... прошу отозваться всех кто знает...
как бы мне проверять в каком регистре получет переменная символы, например: если "символ" в верхнем регистре сделать то и то... если в нижнем - другое не нашел стандартной команды в CMD |
dimitrioglo:
Цитата:
Код:
@echo off |
Цитата:
|
Цитата:
Код:
> type 1.cmd |
Может кому то пригодится как проверить символ в верхнем регистре или нет, я добился вот таким образом:
Код:
@echo off |
Цитата:
|
Цитата:
А теперь по сути... Люди добрые )) помогите... у меня конструкция Код:
for /f "tokens=1-3 skip=1 delims=/-:., " %%a in (conf.txt) do ( Код:
log1 admin В чем косяк..? |
Цитата:
Код:
set value=%%b skip меняет начальное значение цикла, но на последнее значение он ни какого влияния не оказывает (если конечно не превышает число строк в файле). |
Цитата:
|
Попробуйте так:
Код:
for /f "tokens=1-3 skip=1 delims=/-:., " %%a in (conf.txt) do ( |
Цитата:
Но я, как обычно, с новым вопросом... почему в следующей схеме Код:
for /L %%j in (%starting%,1,%ending%) do ( |
Код:
setlocal enableextensions enabledelayedexpansion |
Цитата:
|
Цитата:
|
Цитата:
Код:
@echo off Код:
[SIMPLE USER] |
Все, решил свою задачу, остановился на обыном методе goto что выглядит в конечном итоге так:
Код:
@echo off |
Подскажите, где ошибся...
есть папка с файлами html - в них таблицы мне надо обработать все файлы html в папке и создать одноименные csv для одного файла все работает, а для папки чето запутался Код:
Setlocal EnableDelayedExpansion рабочий вариант для одного файла:
Код:
echo Число мес;Час;номер>> 1.csv файл html во вложении - Файл 152815 |
kvant-07,
Я не проверял работу Вашего кода (рабочий вариант для одного файла), я тупо оформил его в виде процедуры и поместил её вызов внутрь цикла по всем html-файлам текущей папки. Те изменения Вашего кода, которые я счел необходимым сделать, я выделил
Код:
@Echo Off У меня такое ощущение, что это промежуточная работа и Вам в ответе надо получить Excel-файлы. ИМХО, разумнее нарисовать VBS-скрипт, который сразу из исходных файлов получит данные в Excel-таблицах. Хотел из любопытства скачать Ваш файл - что-то не получилось. Может, его переименовать надо, например с расширением .txt либо упаковать? |
Цитата:
внутри оператора скобок, динамически изменяемые переменные, внутри тех же скобок, необходимо раскрывать с помощью отложенного расширения. Т.о. у Вас нерабочий код в обоих случаях... во втором случае, это проявится при условии истинности if "%1"=="TD" А вообще, вот наглядный пример: Код:
@echo off |
какой-то странный глюк с циклом.
беру примитивную задачу: Код:
Set BCP=HKU На этом цикл прекращается. Что ему мешает исполняться для всех из списка? Попробовал просто в комстроке еще более простое Код:
for /f "skip=1 delims=" %G in ('reg query HKU') DO @echo %G Код:
HKEY_USERS\.DEFAULT |
Цитата:
Чтобы включить связывание времени выполнения, нужно добавить в начало батника: Код:
SetLocal EnableDelayedExpansion |
Если не использовать SetLocal EnableDelayedExpansion для связывания времени выполнения
Код:
Цитата:
Вы в цикле получили строки типа HKEY_USERS\S-1-5-19. Файл с именем HKEY_USERS\S-1-5-19.tmp создать нельзя, даже если переменная !FTMP! будет правильно раскрываться, если в текущей папке отсутствует подпапка HKEY_USERS В Вашем случае Вы определили FTMP=%~n0-1.bat до цикла. В цикле переменная не раскрывается с новым значением (для отладки поставьте Echo %FTMP% - увидите (исходный)-1.bat). То есть, в цикле Вы пересоздаёте один и тот же (исходный)-1.bat файл. После цикла предсказуемо получите содержимое для последней строки. Цитата:
|
Цитата:
|
Цитата:
Как сказали выше, для этого требуется отложенное расширение переменных... Для наглядности: Код:
@echo off Цитата:
Если требуется сортировка: Код:
...('reg query HKU^|sort')... В общем, для полноценной помощи, необходима правильная формулировка задачи, а не неправильные попытки её решения... |
Цитата:
Это подзадача к более ранней. Отсюда и цикл - внести переменную в значения, которые потом вносить в реестр или передавать setacl -у, поскольку напрямую переменную перед передачей параметров не ресолвило. В итоговом цикле разные имена файлов не нужны, достаточно в конце цикла задать исполнение его, ожидание исполнения, и цикл заново, перезаписать для другого юзера. Про слеш в имени - ага, не подумал.. Думал, команда цикла будет выдавать список только самих ключей без родителя. Отсюда еще одна ошибка в выводящемся коде (и еще одна причина сначала посмотреть, что выведется, а не пускать на исполнение сразу)) Насчет !FTMP! мне было неочевидно, в промежутках меж работы гуглил, листал маны, так и не нашел, почему надо делать так, а не обычным процентом. Но сработало. Правда как-то странно: В вывод даёт полный набор строк от первого, 18 юзера, и только по одной строке от остальных. вывод:
regedit 4
setacl.exe -on HKU\HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice -ot reg -actn trustee -trst n1:domain\adminuser;ta:remtrst;w:dacl reg delete HKU\HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f reg delete HKU\HKEY_USERS\S-1-5-18\Software\Classes\.adoc /f reg delete HKU\HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f reg delete HKU\HKEY_USERS\S-1-5-19\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f reg delete HKU\HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f reg delete HKU\HKEY_USERS\S-1-5-21-blabla\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f reg delete HKU\HKEY_USERS\S-1-5-21-blabla_Classes\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f reg delete HKU\HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.adoc\UserChoice /f апд, нашел глюк, я эту строку тупо забыл с % на ! заменить. сработало только когда я заремил переименование вывода, чтоб всё выводило в один файл.. |
Цитата:
Код:
setlocal /? |
bredych, дополнительно о связывании можете почитать здесь:
Код:
set /? |
Здравствуйте!
Помогите, пожалуйста, с ошибкой в коде. Цикл ищет определенный текст в реестре, затем записывает адрес текста в переменную. Но почему-то переменная оказывается пустая. Код:
chcp 1251 |
alexfrienmank,
странно как вообще код запустился - ошибка на ошибке что показывает просто запуск: Код:
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /f https://support.cryptopro.ru/ /d /s |
alpap,
Результат команды: Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties x="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties" |
Цитата:
Код:
set "var=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties" |
alpap,
for нужен для поиска адреса в реестре, т.к. адрес может меняться на компьютерах. Проблема в том, что set var=HKEY... можно сделать, но значение переменной, к сожалению, не сохраняется. |
все равно я не понимаю зачем это надо именно так, если что-то внутри этого искать еще понятно ...
Код:
@echo off |
alpap, он-то изначально ищет внутри …\Products, а не внутри …\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties.
|
Iska,
Всё так. alpap, Спасибо. Из результатов команды нужно вытащить только первую строку и записать в переменную. Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties Цитата:
|
Цитата:
Код:
set "var=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7AB5E7046046FB044ACD63458B5F481C\InstallProperties |
Время: 16:56. |
Время: 16:56.
© OSzone.net 2001-