Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: wolf0425
Дата сообщения: 07.07.2010 11:36

Цитата:
А то как удобно было бы...
да чем удобнее чем if "%%c" equ "" echo %%%%-c not defined
Автор: Engraf
Дата сообщения: 07.07.2010 11:54
wolf0425
Цитата:
for %%a in (%var%) do echo %%a
А я и не знал, что здесь можно строку использовать. for /? только про файлы говорит...
Цитата:
да чем удобнее чем...
Тут я стормозил, пардон

Добавлено:
wolf0425
Цитата:
set /p aa=<file
А вот что-то типа этого нельзя поправить, чтоб работало?
Код: set /p count=<find /i /c "текст" file.ext
Автор: res2001
Дата сообщения: 07.07.2010 13:21
Engraf

Цитата:
А вот что-то типа этого нельзя поправить, чтоб работало?
set /p count=<find /i /c "текст" file.ext


for /f "tokens=*" %%a in ('find /i /c "текст" file.ext ') do set count=%%a
Но в переменной count по выходе у тебя будет только значение из последней строки вывода find.
Если надо обрабатывать каждую строку, то делай это внутри цикла.
Кстати и при использовании set, если в файле больше одной строки, переменной присваивается последняя.
Автор: yurkesha
Дата сообщения: 07.07.2010 13:30
res2001
Цитата:
при использовании set, если в файле больше одной строки, переменной присваивается последняя.
При коде
Код: set /p aa=<file
Автор: res2001
Дата сообщения: 07.07.2010 13:45
yurkesha

Цитата:
Всегда присваивается только первая строка...

точно, первая. Писал про for и что-то на set переклинило
Автор: ComradG
Дата сообщения: 07.07.2010 22:31
res2001
Ты koi8-r разобрал?
Автор: BVV63
Дата сообщения: 08.07.2010 05:53
Всех приветствую.
То, что For /F ... очень не любит двойные кавычки в In (...) я обнаружил давно (причём без разницы, используются в скобках апострофы или обратные кавычки). Помню, удивлялся, почему не работает (`"команда" ... "аргумент"`), оказалось, что внешние двойные кавычки (прилегающие к обратным) отбрасывались, получалось (`команда" ... "аргумент`) и ничего не работало. А как быть, ежели двойные кавычки действительно необходимы (присутствуют пробелы в команде)?
P. S. Сейчас ещё попробую разделить ` и " пробелом, может поможет (хотя в том сомневаюсь).

Добавлено:
Да, не помогло. Есть ли выход?

Добавлено:
Кажется, нашёл выход. Всю строку облачить дополнительными двойными кавычками. Пусть самые внешние отбросятся, это не повредит.
Автор: res2001
Дата сообщения: 08.07.2010 07:26
ComradG

Цитата:
Ты koi8-r разобрал?

Нарыл пример koi2unicode, но мне надо бы в 1251.
Придется видимо самому накропать.
Сейчас пока переключился на другое, но в ближайшее время вернусь к перекодировке.
Автор: king_stiven
Дата сообщения: 08.07.2010 07:33
BVV63

Цитата:
То, что For /F ... очень не любит двойные кавычки в In (...)


Экранировать знаком ^
Автор: Vitaly_Sigov
Дата сообщения: 08.07.2010 09:20
Здравствуйте, уважаемые форумчане.
Подскажите, пожалуйста, каким образом через BAT-файл или какой-нибудь скрипт предоставить/отменить доступ к некоторой папке для некоторого пользователя?
Т.е. есть расшаренная по сети папка - в ней куча простых папок. Вопрос:как предоставить/отменить доступ к некоторой из этих простых папок для некоторого пользователя ?
Автор: BVV63
Дата сообщения: 08.07.2010 09:22
res2001

Цитата:
Экранировать знаком ^

Чтой-то не помогает. В простейших случаях, когда и так двойные кавычки прокатывают, всё хорошо и с ^. В более сложных - нет. Искать проги с длинными именами я не стал, просто взял один из фрагментов и добавил кавычки:

Код: For /F "Skip=1 Tokens=* UseBackQ" %%A In (`^"Reg^" Query ^"HKLM\System\CurrentControlSet\Services\EventLog^" ^| ^"Find^" /I ^"HKEY_^"`) Do Echo %%A
Автор: NIKZZZZ
Дата сообщения: 08.07.2010 09:33
BVV63

Цитата:
Есть ли выход?

Можно преобразовать длинные имена в короткие, надобность в кавычках отпадет.

Автор: ComradG
Дата сообщения: 08.07.2010 09:36
BVV63
А нафига вообще ты кавычки туда ставишь?

Код: for /f "skip=1 tokens=*" %%i in ('reg query^
hklm\software\currentcontrolset\services\eventlog ^| findstr /i hkey') do echo %%i
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 09:43
BVV63
а так чем плохо - http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=2020#6
Автор: res2001
Дата сообщения: 08.07.2010 09:49
Vitaly_Sigov

Цитата:
Т.е. есть расшаренная по сети папка - в ней куча простых папок. Вопрос:как предоставить/отменить доступ к некоторой из этих простых папок для некоторого пользователя ?

cacls /? тебе поможет
Автор: BVV63
Дата сообщения: 08.07.2010 09:50
ComradG

Цитата:
А нафига вообще ты кавычки туда ставишь?

Дык, хотел проверить совет king_stiven. В предыдущем посте я ошибочно указал на res2001. Конечно, в данном конкретном случае кавычки у Reg и Find не нужны (я написал, что поленился искать проги с длинными именами, либо Reg и Find засовывать в каталоги с длинными именами).

Автор: mugil_cephalus
Дата сообщения: 08.07.2010 09:53
BVV63

Цитата:
Reg и Find засовывать в каталоги с длинными именами).

зачем с длинными - достаточно пробела

Код: c:\spa ce\reg.exe
Автор: BVV63
Дата сообщения: 08.07.2010 09:53
mugil_cephalus

Цитата:
а так чем плохо

Дак я тремя постами выше тоже написал, что как вариант можно всю строку дополнительно окружить двойными кавычками.

Добавлено:
mugil_cephalus

Цитата:
зачем с длинными - достаточно пробела

Ну, я это и подразумевал. Просто неудачно выразился.

Добавлено:
NIKZZZZ

Цитата:
Можно преобразовать длинные имена в короткие, надобность в кавычках отпадет.

Хм... Это как? Если длинное (имеющее пробелы) имя засунуть в переменную, так она же в цикле всё равно разъименуется.
Автор: ComradG
Дата сообщения: 08.07.2010 10:06
BVV63
Например:

Код: set name=%systemroot%\microsoft.net\framework\v2.0.50727\vbc.exe
for /d %%i in ('%name%') do (
set name=%%~si
)
echo %name%
Автор: BVV63
Дата сообщения: 08.07.2010 10:19
ComradG
Разве если в пути есть пробелы, то при выполнении цикла проблем не возникнет? Переменная ведь разъименуется.
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 10:29
ComradG

Цитата:
Например:

Код:set name=%systemroot%\microsoft.net\framework\v2.0.50727\vbc.exe
for /d %%i in ('%name%') do (
set name=%%~si
)
echo %name%

а ты скрипт проверял ? у тебя работае?
Автор: NIKZZZZ
Дата сообщения: 08.07.2010 10:30
BVV63

Цитата:
Хм... Это как?


Код: Set LongName=c:\Program Files\Windows Media Player\wmplayer.exe
FOR /F "usebackq delims=" %%i IN ('%LongName%') do set ShortName=%%~si
Echo %ShortName%
Автор: ComradG
Дата сообщения: 08.07.2010 10:35
mugil_cephalus
Каэшн работает? А чего ты взбеленился вдруг?
Правда где for я использовал "%name%" а не '%name%'.
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 10:36
NIKZZZZ
у BVV63 в задаче помоему были только hkey-имена , а не ntfs-имена


Добавлено:
ComradG
покажи
Цитата:
echo %name%

Автор: ComradG
Дата сообщения: 08.07.2010 10:39
mugil_cephalus
Чего тебе показать? Вывод %name%? Я не телепат, можешь уточнить что именно тебе показать?
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 10:43
ComradG
вообще
Цитата:
echo %name%
- последняя строка твоего кода 1-ого сообщ. стр. , но раз
Цитата:
Правда где for я использовал "%name%" а не '%name%'.
вывод я сам посм.
Автор: ComradG
Дата сообщения: 08.07.2010 10:47
mugil_cephalus
Товарищ! Пожалуйста, как мне еще тебя просить, выражай свои мысли, чтоб было понятно. Я не могу уловить смысл
Цитата:
вообще
или
Цитата:
вывод я сам посм.

P.S> Прошу прощения, там где for в имени переменной я вообще никаких кавычек не ставил. Еще раз прошу прощения за свою оплошность и торопливость, а также забывчивость.

Добавлено:

Цитата:
Разве если в пути есть пробелы, то при выполнении цикла проблем не возникнет? Переменная ведь разъименуется.

Каким образом? Просто при получении коротког имени используется DOS-схема.
Автор: mugil_cephalus
Дата сообщения: 08.07.2010 11:16
ComradG
твое первое сообщение с этой страницы

Цитата:
BVV63
Например:

Код:set name=%systemroot%\microsoft.net\framework\v2.0.50727\vbc.exe
for /d %%i in ('%name%') do (
set name=%%~si
)
echo %name%

я и написал, если код у тебя работает, то покажи вывод
Цитата:
echo %name%
( это последняя строка твоего кода )
ну раз
Цитата:
P.S> Прошу прощения, там где for в имени переменной я вообще никаких кавычек не ставил. Еще раз прошу прощения за свою оплошность и торопливость, а также забывчивость.

вывод можно и не показывать - я просто не догадался, что две одинарные кавычки из цикла - мнимые и ты их не использовал...
Автор: BVV63
Дата сообщения: 08.07.2010 11:22
ComradG

Цитата:
Каким образом? Просто при получении коротког имени используется DOS-схема.

Да, я не обратил внимания на

Цитата:
set name=%%~si
Автор: ComradG
Дата сообщения: 08.07.2010 11:29
mugil_cephalus
Ну вот тебе вывод

Код: C:\WINDOWS\MICROS~1.NET\FRAMEW~1\V20~1.507\vbc.exe

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.