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

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

Автор: us0r
Дата сообщения: 03.06.2010 17:47
wolf0425
Заговорился... извини... через for.
Автор: Free_Soft
Дата сообщения: 03.06.2010 17:57
кто знает, как в х64 винде запустить батник именно 64-битной версией cmd.exe, а не cmd.exe из sysWOW64, что происходит по умолчанию??
Автор: wolf0425
Дата сообщения: 03.06.2010 18:24

Цитата:
Заговорился... извини... через for.
это как?
я же сразу просил пример кода...
Автор: us0r
Дата сообщения: 03.06.2010 18:33
Free_Soft
Никак. Тут только еретические VBScript/PowerShell тебе помогут.
Если ты о реестре- копай в гугле оформление нужных веток реестра.
Но проще задать вопрос в теме о WSH/VBScript (JScript).
Автор: mugil_cephalus
Дата сообщения: 03.06.2010 21:24
wolf0425
masterscript:

Код: start "" cmd /k "title yourtitle &pause &exit"
Автор: wolf0425
Дата сообщения: 03.06.2010 22:08
mugil_cephalusну, а как сам этот поток, поставленный на паузу, прибивать по истечении таймера ?
через taskkill по уникальному имени окна, что-ли? интересно, если окна не видно - сработает?
Автор: mugil_cephalus
Дата сообщения: 03.06.2010 22:28
wolf0425

Цитата:
интересно, если окна не видно - сработает?

а какая разница в фокусе?
taskkill же не по фокусу , а по фильтру - taskkill /fi windowtitle

Добавлено:
cluster
похожую задачу решали тут - http://forum.ru-board.com/topic.cgi?forum=5&topic=29819&start=1340#9

Добавлено:
wolf0425
или так, например -
Цитата:
CMDOW [window | /T] [/B] [/F] [/P]
window Window to list. If not specified all windows are listed. Specify a window by its unique handle in hexadecimal format (0x1A0142) or its caption (case insensitive). Windows without captions may be specified by their ClassName. The At symbol '@', may be used to refer to this window ie 'CMDOW @'. Use double quotes for captions containing whitespace or control characters.
см. - http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=780#18
Автор: wolf0425
Дата сообщения: 03.06.2010 23:38

Цитата:
taskkill же не по фокусу , а по фильтру - taskkill /fi windowtitle
засада:
Код: start /b "" cmd.exe /k "pause & exit & %key%"
title killme
taskkill /f /FI "WINDOWTITLE eq killme"
Автор: barsikline
Дата сообщения: 04.06.2010 00:56
Помогите разобраться.
Необходимо чтобы с ftp качались все файлы или целиком папка дата которых больше по сравнению с другими.
сейчас код такой:

(echo user anonymous anonymous
echo cd "Инструкциия и документация/Техническая документация/МТ1 РТО и ОФЗ/"
echo ls -t) | ftp -n 10.22.33.242 > filelist.tmp

set /p newest= < filelist.tmp

(echo user anonymous anonymous
echo cd "Инструкциия и документация/Техническая документация/МТ1 РТО и ОФЗ/"
echo bin
echo hash
echo prompt
echo get %newest%) | ftp -n 10.22.33.242

Этот батник качает один файл в соответствии с полученным листом, отсортированным по времени создания (команда "ls -t" ). Но необходимо так, чтобы качались, к примеру, все файлы (или папки) за день в который были они выложены, кроме файлов дата создания которых меньше.
+ к этому в коде есть проблема: если в пути с русскими словами стоит 3 и более пробела (к примеру, \Каталог который нужно скачать), то привыполнении bat-ника пишет - "CWD": no such file or dirictory. Кто-нибудь знает как это можно обойти? Сразу говорю, кодировку проверял, сокращение 8-3 не работает, заключение пути в кавычки не помогает.
Автор: mugil_cephalus
Дата сообщения: 04.06.2010 07:14
wolf0425

Цитата:
taskkill /f /t - прибил все же...



Цитата:
засада:
Код:start /b "" cmd.exe /k "pause & exit & %key%"
title killme
taskkill /f /FI "WINDOWTITLE eq killme"

я смотрел в help'e hh ntcmds.chm - там в примерах по синтаксису все taskkill'ы с фильтрами требуют наличия в команде ключа /IM
типа
Код: taskkill /f /FI "WINDOWTITLE eq killme" /im cmd.exe
Автор: king_stiven
Дата сообщения: 04.06.2010 09:37
barsikline

Цитата:
Необходимо чтобы с ftp качались все файлы или целиком папка дата которых больше по сравнению с другими.

Шапка

Цитата:
Работа с текстом, датой, и файлами »

Автор: Den13V
Дата сообщения: 04.06.2010 09:39
Всем Доброго времени суток!!!

Задача такова, при копировании файла на сетевую машину проверяется код ответа
%ERRORLEVEL%, если ошибки копирования нет пакет продолжает работу, если присутствует ошибка производится переименование копируемого файла и он остается в тойже папке (но под другим именем).

Вопрос:
1) Как можно добавить в имя файла %time%? при попытке добавления происходит ошибка, вероятно вследствии того, что в возврате команды time присутствуют знаки неприменяемые в назв. файлов.

Если нет возможности добавить к назв. файла времени, то возникает второй вопрос:

2) Как сделать так чтобы файлы создавались с порядковым номером, т.е. как говорилось выше в описании задачи, при возникновении ошибки файл переименовывается и остается на своем месте, но под другим именем, надо чтоб данный файл не затирался при следующем выполнении задачи, а создался новый с именем на порядок выше, т.е. есть файл rezerv.rar, он переименовался в rezerv_error_copy_%date%.rar, а при следующем выполнении задачи должен создатся файл rezerv_error_copy_%date%_1.rar


Данная задачи работает каждые 30 минут и один параметр %date% не спасает, так как за сутки будет 48 файлов с одной датой.

Заранее очень благодарен за помощь.
Автор: mugil_cephalus
Дата сообщения: 04.06.2010 09:55
Den13V

Код: for /f "eol=." %%i in ('wmic os get LocalDateTime ^|more +1') do set "var=%%i"
set "var=%var:~6,2%%var:~4,2%%var:~2,2%_%var:~8,2%%var:~10,2%"
echo._%var%_
pause
Автор: Altus
Дата сообщения: 04.06.2010 10:03
Den13V
Да, из-за двоеточия, попробуйте например так:

Код: set timenew=%time:~0,5%
set timenew=%timenew: =0%
set timenew=%timenew::=.%
Автор: user5nov
Дата сообщения: 04.06.2010 10:05
Здравствуйте, помогите написать батник или какой нибудь другой скрипт.
Задача такая: каждый час у пользователя всплывает сообщение, о чём либо (это примерно поздравления).
Как я вижу реализацию: написать батник с запросом текста из текстового файла, в котором расположены эти сообщения. Некоторые из сообщений там могут быть длинными, или содержать много строк.
Запуск скрипта допустим осуществлять через Назначенные задания в виндовсе.
Думаю проблема в том как он будет считывать оттуда текст. Вдруг перейдёт в конец считывать или допустим возьмёт информацию люшнюю и выведет на экран пользователя.
Автор: king_stiven
Дата сообщения: 04.06.2010 10:23
user5nov
TYPE 1.txt
Также есть много утилит, чтоб выводить содержимое текстового файла в стандартное окно сообщения вынды.
Автор: user5nov
Дата сообщения: 04.06.2010 10:26
king_stiven
подскажи их пожалуйста.
Автор: king_stiven
Дата сообщения: 04.06.2010 10:43
user5nov
шапка

Цитата:
Полезные утилиты

может и nircmd может
Автор: user5nov
Дата сообщения: 04.06.2010 10:48
king_stiven
спасибо за подсказку, но я полный нуб в этом деле, может подскажешь как это решается ? прогу то скачал, а толку ((

Добавлено:
echo off
@start /MIN nircmd.exe infobox "У тебя сегодня день рождения ? Желаем счастья и добра! И вечной юности цветенья." "ВНИМАНИЕ!!! ВНИМАНИЕ!!! ВНИМАНИЕ!!!"

получилось такое. На большее моск не способен.

Пмогите плиз.
Автор: us0r
Дата сообщения: 04.06.2010 11:08
mugil_cephalus

Цитата:
start "" cmd /k "title yourtitle &pause &exit"

А что это делает?
Автор: king_stiven
Дата сообщения: 04.06.2010 11:10
user5nov
Лет до ста расти вам без старости!
Автор: wolf0425
Дата сообщения: 04.06.2010 11:10
mugil_cephalus
Цитата:
я смотрел в help'e hh ntcmds.chm - там в примерах по синтаксису все taskkill'ы с фильтрами требуют наличия в команде ключа /IM
опущенно специально: если какое ещё окно сдуру установило title killme - тo наверно оно тоже хочет чтоб его закрыли


Цитата:
Метка может включать пробелы, но не может включать другие разделители, такие как точка с запятой или знак равенства. В команде goto используются только первые восемь знаков метки. Например, следующие метки эквивалентны и рассматриваются как :hithere0:
не знаю где используется только 8, но cmd.exe от xp sp3 eng - различие в 10м знаке вполне замечает, :timerloop и :timerloop2 - считает разными метками


Автор: us0r
Дата сообщения: 04.06.2010 11:10
wolf0425

Цитата:
set count=30
set key=%random%
start /b "" cmd.exe /q /k "pause & exit & %key%"

:timerloop
title %count% Ready: %~nx1 %ssize%%%
set /a count -= 1
ping -n 2 localhost 1>nul 2>nul
if %count% leq 0 (title killme) & taskkill /f /t /fi "windowtitle eq killme" 2>nul 1>nul
wmic process where (name='cmd.exe') get commandline | 1>nul findstr /r /b cmd.*pause.*exit.*%key% && goto :timerloop

Что за код?
Автор: wolf0425
Дата сообщения: 04.06.2010 11:14
us0r ждем 30 секунд или нажатия на любую кнопку, потом закрываемся независимо от того нажали или нет (нажали - закрываемся сразу).
в принципе можно переделать что не закрываемся, а куда-то дальше идем, если кому надо.
Автор: us0r
Дата сообщения: 04.06.2010 11:16
wolf0425
mugil_cephalus
Эммм...
А сделать список процессов CMD до запуска окна и сравнить его со списком сразу после запуска по определённым критериям- атеизм не позволяет?
Типа:
tasklist | findstr >> куда- нить 1 (переменные?)
start blablabla & tasklist | findstr >> куда- нить 2
сравнить куда-нить 1 и куда- нить 2 /параметры | taskkill /PID
Автор: wolf0425
Дата сообщения: 04.06.2010 11:18

Цитата:
А сделать список процессов CMD до запуска окна и сравнить его со списком сразу после запуска по определённым критериям- атеизм не позволяет?
у меня между запуском окна и его закрытием - в системе иногда стартует/завершается ещё 5 окон, из них три+ - других потоков того же батника. какая польза от списка то?
и никаких посторонних окон этот код НЕ запускает.
Автор: us0r
Дата сообщения: 04.06.2010 11:22
Необязательно ждать закрытия- там же сразу после запуска ищется новое окно/копия CMD. Т.е. Смысл скорее получить PID новосозданного процесса. А шанс получить именно его- велик. И не париться с названиями окон, а прибивать по PID
Автор: wolf0425
Дата сообщения: 04.06.2010 11:28

Цитата:
А шанс получить именно его- велик. И не париться с названиями окон, а прибивать по PID
шанс получить правильный pid - отличается от 100%
что должен будет делать батник, если между стартом и проверкой добавилось ДВА+ новых pid? монетку подбрасывать?

прибивать по названию окна или по pid - разницы совершенно никакой, названием СВОЕГО окна батник управляет сам. а вот проблемы получить pid именно собственного порожденного процесса, когда соседняя копия батника делает то же самое - заведомо есть.



Автор: Den13V
Дата сообщения: 04.06.2010 11:33
Altus

Огромное человеческое СПАСИБО, помогло, только строка

set timenew=%teminew: =0%

не нужна, и новое имя файла пришлось взять в ковычки, т.к. после ввода времени в имя файла появляется пробел в конце времени (rezerv_error_copy_11.26 .rar).

Подскажи пожалуйста еще как вывести время в формате часы:минуты:секунды
Автор: wolf0425
Дата сообщения: 04.06.2010 11:35
Den13V
Цитата:
и новое имя файла пришлось взять в ковычки, т.к. после ввода времени в имя файла появляется пробел в конце времени

1. строка нужна, если батник запустишь до 10 часов утра с неудачными настройками системы.
2. пробел появляется потому что ты его сам написал в конце строки set timenew=%teminew: =0% или какой-то предыдущей
3. правильно было писать set "timenew=%teminew: =0%"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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