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

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

Автор: lorents
Дата сообщения: 27.04.2011 20:13
smirnvlad
Именно то что надо. Спасибо.
Автор: wolf0425
Дата сообщения: 27.04.2011 23:03

Цитата:
А можно сделать, чтобы поддерживал такие варианты:
"D:\Прочее\Image Catalyst\Tools
а где ты такие кривые варианты берешь?
в смысле - откуда нечетное количество кавычек?
Автор: smirnvlad
Дата сообщения: 28.04.2011 05:20
wolf0425

Цитата:
а где ты такие кривые варианты берешь?
в смысле - откуда нечетное количество кавычек?

путь получается переносом папки на окно батника, но после этого можно править: ещё дописать подпапку(или изменить название папки, удалив последнюю кавычку, а потом забыв её дописать и получится путь без закрывающей кавычки
Автор: lorents
Дата сообщения: 28.04.2011 07:56
wolf0425
Именно так, как сказал smirnvlad
Все равно кавычки запрещены в названиях папок, поэтому можно смело удалять все кавычки.

А как грамотно можно написать, то что написал smirnvlad, чтобы пользователь мог понять, как можно указать адрес папки?
Автор: wolf0425
Дата сообщения: 28.04.2011 10:33

Цитата:
путь получается переносом папки на окно батника,
т.е. нет никаких проблем сразу иметь путь без обоих кавычек - %~1
и в дальнейшем никогда их к переменной не добавлять, обрамлять всегда явно, при использовании.

"удалять последнюю кавычку" - это путь к трудноуловимым багам.
Автор: astratek
Дата сообщения: 28.04.2011 10:59
спрашивал
в каталоге имеются разные файлы, необходимо скопировать первый найденный файл в другой каталог. как можно реализовать?

ответили res2001
for %%a in (<путь откуда копировать>\*) do copy /y/b %%a <путь куда копируем>


сделал вот так
for %%a in (c:\test1\*) do copy /y/b %%a c:\test2\ & exit

при такой реализации, копирует все файлы имеющиеся в каталоге c:\test1
мне нужен только 1 найденный файл
Автор: res2001
Дата сообщения: 28.04.2011 11:27
astratek
Нормально копируется 1 файл и выходит.
Для теста поставь перед copy echo и посмотри какая команда copy будет выполняться.
Автор: smirnvlad
Дата сообщения: 28.04.2011 11:39
wolf0425

Цитата:
нет никаких проблем сразу иметь путь без обоих кавычек - %~1

есть, а,так как папка кидается на уже открытое окно батника, а не на иконку с последующим запуском. батник ждет ввода пути через set /p folder=, а кинет пользователь папку или введет "от руки" заранее неизвестно
удаляются все кавычки, а не только последняя
Автор: wolf0425
Дата сообщения: 28.04.2011 11:43

Цитата:
а кинет пользователь папку или введет "от руки" заранее неизвестно
а, ну если юзер через set /p вводит - то конечно сразу обрезать, причем все. вопрос то и был - откуда может одиночная появиться, если удалять все - и проще и полезнее?
Автор: Bezzz
Дата сообщения: 28.04.2011 11:47

Цитата:
а как его заставить работать с пробелами в пути папки?

Действительно, с пустым устройством в кавычках не работает (риторический вопрос - почему?).
Но можно попробовать добавлять просто слеш:

Код: if not exist "C:\Documents and Settings\" echo dir
Автор: lorents
Дата сообщения: 28.04.2011 18:56
Добрый вечер!

Код: :loop
echo Укажите адрес папки с изображениями формата PNG и JPEG для оптимизации:
echo.
set folder=
set /p folder=
if not defined folder (
    set folder=Images
    echo !folder!
)
set "folder=%folder:"=%"
1>nul 2>nul dir /ad "%folder%"
if errorlevel 1 (
    echo Error. Указанная папка не обнаружена.
    goto:loop
)
Автор: 01MDM
Дата сообщения: 28.04.2011 19:03
lorents
Лучше заранее определить переменную %folder%

Код:
:loop
echo Укажите адрес папки с изображениями
echo.

set "folder=Images"
set /p folder="формата PNG и JPEG для оптимизации: "

set "folder=%folder:"=%"
1>nul 2>nul dir /ad "%folder%" || (

echo Error. Указанная папка не обнаружена.
goto:loop

)
Автор: lorents
Дата сообщения: 28.04.2011 19:21
01MDM
Спасибо, сделаю как ты сказал, тогда ничего не надо.
Автор: stoun
Дата сообщения: 29.04.2011 08:10
Доброе время суток. Есть скрипт такого плана
___________________
@echo off
echo user login pass> ftp.dat
echo bin>> ftp.dat
echo put e:\1.txt>> ftp.dat
echo quit>> ftp.dat
ftp -n -s:ftp.dat ip
del ftp.dat
________________

как можно в скрипте сделать так чтобы перед копированием файла по фтп 1.txt он удалял старый файл 1.txt с фтп сервера?
Автор: smirnvlad
Дата сообщения: 29.04.2011 09:29
наверное, так:
echo delete 1.txt>> ftp.dat
Автор: Derini
Дата сообщения: 29.04.2011 10:56
Подскажите, плз.

Есть команда
rundll32 printui.dll,PrintUIEntry /in /u /w /q /n "\\server\printer"
либо скрипт
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.AddWindowsPrinterConnection "\\server\printer"

выполняется на доменном ПК.
Скрипты работают, но при этом появляется запрос на установку + запрос пароля админа.

Как можно вбить логин/пасс админа и сделать тихую установку без всяких окон?

ЗЫ: система Win7
Автор: Bezzz
Дата сообщения: 29.04.2011 15:49
Derini, UAC на доменном ПК отключен?
Автор: Bezzz
Дата сообщения: 29.04.2011 22:58
Возник вопрос к гуру

Код:
@echo off
echo ! > !.txt
for /f "tokens=1" %%i in (!.txt) do (
    echo %%i - %TIME%
    ping localhost -t -n 10 > nul
    echo %%i - %TIME%
)
del /f /q !.txt
Автор: Alexey87
Дата сообщения: 29.04.2011 23:04
Здравствуйте уважаемые форумчане!
Возникла следующая проблема (если можете – помогите):
есть html-документы (около 1000), нужно извлечь все заголовки (тег h) например в txt-файл.
Возможно ли это реализовать с помощью bat-файла? Если да, то как?
Автор: 01MDM
Дата сообщения: 29.04.2011 23:11
Bezzz

Код:
@echo off
setlocal enabledelayedexpansion

for /l %%i in (0,1,5) do (

1>nul ping -n 3 localhost
echo !time!

)
Автор: Bezzz
Дата сообщения: 30.04.2011 07:24
01MDM, сенькс.
И снова в который раз убедился в том, что надо внимательней читать то, что выводит например

Код: set /?
Автор: NIKZZZZ
Дата сообщения: 30.04.2011 10:47
Bezzz

Цитата:
Выводимое время - одинаковое. Невзирая на 10 сек. задержки от пинг.


Хотя и операции, заключенные в скобки, выполняются последовательно, значение переменных (%Time%) не меняется для всего блока.

Можно, например, так:

Код: @echo off
echo ! > !.txt
for /f "tokens=1" %%i in (!.txt) do call :_1 %%i
del /f /q !.txt
goto :eof

:_1
echo %1 - %TIME%
ping localhost -t -n 10 > nul
echo %1 - %TIME%
goto :eof
Автор: Bezzz
Дата сообщения: 30.04.2011 13:13
NIKZZZZ, спасибо, но я воспользовался напоминанием, любезно предоставленным 01MDM
Это setlocal enabledelayedexpansion
и вместо %VAR% использовать !VAR!
именно так написано в set /?, цитирую:
Связывание времени выполнения для переменных среды окружения происходит при использовании специального символа (восклицательного знака), обозначающего проведение сопоставления во время выполнения. Если включена поддержка связывания времени выполнения, то для достижения ожидаемых результатов приведенные выше фрагменты должны быть изменены следующим образом...
Вывод: инструкцию читать надо

Кстати, припоминаю, что не в первый раз наступаю на эти грабли. Старость не радость :-D
Автор: 01MDM
Дата сообщения: 30.04.2011 13:18
Bezzz
На самом деле, если не нужен enabledelayedexpansion, а такие ситуации случаются, то все решается выносом из тела цикла, как подсказалNIKZZZZ, я обычно делаю именно так.

Автор: Bezzz
Дата сообщения: 30.04.2011 13:25
01MDM, вынос уже используется, и весьма интенсивно. А время нужно чтобы знать сколько секунд выполняется каждый проход цикла. Анализировать дату последнего изменения файлов слишком утомительно )
Автор: Alexey87
Дата сообщения: 30.04.2011 19:27
01MDM, благодарю за помощь, но код не срабатывает.
Заменил конструкцию "C:\Folder\where html" на "d:\html" (так как именно здесь лежат файлы)
Большинство заголовков имеют вид <h1 id="fav_name_1" class="news_item_header">some title</h1>
Автор: ASE_DAG
Дата сообщения: 30.04.2011 19:41
01MDM
> "<h3>some title</h>"
Такого вида быть не может — у вас открывающий и закрывающий тэг разные. ;)
Автор: 01MDM
Дата сообщения: 30.04.2011 21:47
ASE_DAG

Цитата:
Такого вида быть не может — у вас открывающий и закрывающий тэг разные.

В смысле </h3> ? Да уж, не вебмастер =)
Alexey87

Цитата:
Большинство заголовков имеют вид <h1 id="fav_name_1" class="news_item_header">some title</h1>

Ключевое слово "большинство". Тогда либо sed и регэкспы, так как виндовый findstr очень ограничен в плане поиска по рег. выражениям, либо все заголовки одинаковые. В вашем случае это должно выглядеть где-то так:

Код:
....
for /f "tokens=2 delims=<>" %%j in ('findstr /i "h1.*>.*</h1" "%%i"') do echo %%j
.....
Автор: Free_Soft
Дата сообщения: 30.04.2011 22:28
Пардон за небольшой оффтоп, кто знает, где в реестре Win7 хранится содержимое Панели управления? конкретно, нужно оттуда удалить Защитника Windows
Автор: ASE_DAG
Дата сообщения: 30.04.2011 22:57
01MDM
> findstr очень ограничен в плане поиска по рег. выражениям
Т.е. такая штука не прокатит:
"h[1-6].*>.*</h[1-6]"
?

Сед выборку субстрок из строки (как ни странно) делать не умеет.
Разумеется можно Авком, но для столь простой задачи идеально подойдет и grep, у которого есть ключ -o:

$ grep -o '<h[1-6][^>]*>[^<]*</h[1-6]>' file.html

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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