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

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

Автор: takt03
Дата сообщения: 17.01.2010 15:25
wolf0425
Извиняюсь. После чательной проверки и небольшой коррекции всё заработало Спасибо!
BorlandIMHO тоже ОГРОМНОЕ СПАСИБО! Теперь буду читать книгу и подробней изучать, уже написанный вами код.
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 15:29
Black_Swan

chcp 1251>nul &ver|find /i "е">nul 2>&1 &&1>con (echo Rus) ||1>con (echo Eng)

Добавлено:
takt03

Цитата:
В фоновом режиме (без отобржения процесса)

прога cmdow - http://www.commandline.co.uk/cmdow/
консольное окно мигнет и "уйдет" в background
прога hstart - http://www.ntwind.com/software/utilities/hstart.html
консольное окно даже не мигнет
Автор: wolf0425
Дата сообщения: 17.01.2010 16:52

Цитата:
ваш вариант копирует содержимое ВСЕХ подпапок заданной корневой QIPUSERFOLDER. Без разбору...
да, history потерялась, поправил.
Автор: BorlandIMHO
Дата сообщения: 17.01.2010 23:12
полдня сидел, но задачу "History to ftp" всё-таки решил!
Причём (на мой взгляд) довольно красиво: скрипт рекурсивно обходит всё дерево начиная с заданной папки, если в дереве есть папка "History" - она копируется вместе со всеми вложенными папками и файлами на сервер с соблюдением структуры и относительного пути. Ветки, не содержащие папки "History", игнорируются.

Код: @echo off
chcp 1251

set FTPSERVER=somthere.in.the.net
set FTPUSER=ftpusername
set FTPPASSWORD=ftpuserpassword
set "FTPFOLDER=/incoming/дальше идёт моя папка"
set "LOCALFOLDER=c:\Program Files\QIP\Users\"
1>"%~dp0ftpscript.tmp" (
    echo open %FTPSERVER%
    echo %FTPUSER%
    echo %FTPPASSWORD%
    echo binary
    echo literal pasv
)
for /f "delims=" %%D in ('dir /a:d /b "%LOCALFOLDER%*"') do call :FLDCHK "%%~dpnxD" "/%%~nxD"
1>>"%~dp0ftpscript.tmp" echo by

ftp -s:"%~dp0ftpscript.tmp"
del "%~dp0ftpscript.tmp"

goto :EOF


:FLDCPY
1>>"%~dp0ftpscript.tmp" (
    echo mkdir "%FTPFOLDER%%~2"
    echo cd "%FTPFOLDER%%~2"
    echo lcd "%~dpnx1"
)
for /f "delims=" %%A in ('dir /B /A:-D "%~1"') do 1>>"%~dp0ftpscript.tmp" (
    echo put "%%~nxA"
)

for /f "delims=" %%B in ('dir /B /A:D "%~1"') do call :FLDCPY "%~1\%%~nxB" "%~2/%%~nxB"

goto :EOF


:FLDCHK
pushd "%~1"
for /f "delims=" %%E in ('dir /a:d /b *') do (
    if "%%~nxE" == "History" (call :FLDCPY "%%~dpnxE" "%~2/%%~nxE") else (call :FLDCHK "%%~dpnxE" "%~2/%%~nxE")
)
popd
goto :EOF
Автор: takt03
Дата сообщения: 18.01.2010 04:45
Ещё бы в фоновом режиме всё выполнялось автоматически вообще лафа была )
Тоесть запускалась как служба. Причём сама добисывалась в реестр. Но это я попробую сам реализовать. Всем ещё раз спасибо!
Автор: king_stiven
Дата сообщения: 18.01.2010 09:57
Кто пользуется wget, не у кого не было проблем, когда wget самопроизвольно повторяет в запись кусок файла килобайт на 15? Скорее всего это происходит в момент обрыва связи.
Автор: Busobus
Дата сообщения: 18.01.2010 10:06
Добрый день. Возникла задачка реализовать копирование определенных папок с файлами. С копирование все ясно . Но список путей к этим файлам постоянно меняется и находиться в тхт файле. Каким образом можно парсить тхт файл? Спасибо
Автор: king_stiven
Дата сообщения: 18.01.2010 10:14
Busobus
вывод построчно содержимого файла с пробелами

for /f "usebackq tokens=*" %%i in ("список файлов") do echo "%%i"
Автор: wolf0425
Дата сообщения: 18.01.2010 11:00

Цитата:
не было проблем, когда wget самопроизвольно повторяет в запись кусок файла килобайт на 15?
пока вроде не было. GNU Wget 1.11.4

Автор: vov4ka
Дата сообщения: 18.01.2010 11:31
Господа и дамы,отзовитесь!В программировании батников почти ничего не понимаю,но нужно реализовать 2 задачи,читайте 2 батника:комп у меня в домене и при загрузке требует нажатия Ctrl+alt+del, ввести имя и пароль доменного юзера
1)нужен батник,который избавляет меня от этого,т.е. чтобы комп автоматом входил под доменным юзером без моего участия
2)Мне нужно,чтобы значение всем переменным окружения(локальным папкам temp) присваивалось c:\windows\temp и после 19,00 эта папка автоматически чистилась,после чего комп выключался несмотря на возможные ошибки,возникающие при завершении работы windows 2003

Буду премного благодарен откликнувшимся людям!
Автор: Busobus
Дата сообщения: 18.01.2010 12:07

Цитата:
Busobus
вывод построчно содержимого файла с пробелами

for /f "usebackq tokens=*" %%i in ("список файлов") do echo "%%i"


Большое спасибо, а как эти пути к файлам на обработку отправлять? В какие-то переменные заносить а потом их обрабатывать?
Автор: wolf0425
Дата сообщения: 18.01.2010 12:32

Цитата:
Большое спасибо, а как эти пути к файлам на обработку отправлять?

echo "%%i" - это как раз обработка. если нужна более другая - сначала стоит прочитать for /?
Автор: anachrom
Дата сообщения: 18.01.2010 13:23
Подскажите пожалуйста, как при помощи .bat файла вывести ключ реестра который его запускает.
Автор: Kirillhome
Дата сообщения: 18.01.2010 21:23
vov4ka

Цитата:
но нужно реализовать 2 задачи,читайте 2 батника:комп у меня в домене и при загрузке требует нажатия Ctrl+alt+del, ввести имя и пароль доменного юзера
1)нужен батник,который избавляет меня от этого,т.е. чтобы комп автоматом входил под доменным юзером без моего участия

А при чём здесь bat-файл???
Если, конечно, это надо сделать на многих компьютерах - то нужна автоматизация, а иначе - см. здесь
Если принципиально редактировать реестр через bat-файл....

Ну, что то типа такого...

Код:
@echo off
set My_Name="Vasya Pupkin"
Set My_Domain="My Domain"
Set My_Password="My Password"
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f > nul
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d %My_Name% /f > nul
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName /t REG_SZ /d %My_Domain% /f > nul
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d %My_Password% /f > nul
Автор: Lion654
Дата сообщения: 18.01.2010 22:16
Подскажите, можно ли запустить .bat-файл от имени администратора с помощью другого bat- или cmd-файла?
Если можно, то как?
ОС:Windows 7
Автор: Alex1985
Дата сообщения: 19.01.2010 01:01
батник стартует службой. рабочий каталог получается system32, а нужен тот, в котором лежит батник. cd c:\папка не подходит, потому что батник может лежать в разных папках. как обойти?
Автор: king_stiven
Дата сообщения: 19.01.2010 01:06
Alex1985
В шапке
Переменная %0 [?]
Автор: Alex1985
Дата сообщения: 19.01.2010 01:16
это я видел и пробовал...

Цитата:
set cpath=%~dp0
ping 127.0.0.1 -t

в результате

Цитата:
C:\WINDOWS\system32>set cpath=C:\test\

C:\WINDOWS\system32>ping 127.0.0.1 -t


Добавлено:
а... cd %~dp0
вопросов больше не имею
Автор: wolf0425
Дата сообщения: 19.01.2010 02:48
лучше cd /d "%~dp0"
Автор: Alex1985
Дата сообщения: 19.01.2010 02:55
да, точно.
всем спасибо
Автор: vov4ka
Дата сообщения: 19.01.2010 05:29
Kirillhome,спасибо!Как раз то,что нужно!Хотелось бы уточнить еще несколько моментов

Цитата:
А при чём здесь bat-файл???
Если, конечно, это надо сделать на многих компьютерах - то нужна автоматизация, а иначе - см. здесь
Если принципиально редактировать реестр через bat-файл....

Да, это надо сделать на нескольких компах!Что Вы подразумеваете под понятием "Автоматизация"? И еще:какую прогу посоветуете использовать вместо стд. планировщика,желательно компактную?

P.S. Огромнейшее Вам СПАСИБО,то,что нужно!!!



Автор: svobodny
Дата сообщения: 19.01.2010 06:43
Через батник запускаю 2 программы, первая необходима для работы второй. Когда поработал и закрываю вторую, первая соответственно висит в процессах. Приходится ее тоже закрывать ручками.

Можно ли как-то следить за процессом второй программы и после ее закрытия закрывать первую? Для этого батник по-идее не должен закрываться после запуска прог?..

Подскажите, пожалуйста.
Автор: king_stiven
Дата сообщения: 19.01.2010 09:06
svobodny
Парсить вывод команды tasklist через определённые промежутки и затем по необходимости:

Taskkill /F /IM Program.exe
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 09:55
можно как-то обойти проблему с ошибкой findstr: ??

FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 125.
FINDSTR: Слишком длинная строка 286.
FINDSTR: Слишком длинная строка 287.

и еще не пойму с выводом (не все строки, нет, например, № 47 и 49, хотя нет и ошибки - FINDSTR: Слишком длинная строка 47 или 49 ) [more]F:\>reg query "hklm\hardware" /s |findstr /i /n "HKEY_LOCAL_MACHINE\hardware VideoBiosDate"|more
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 125.
4:HKEY_LOCAL_MACHINE\hardware
6:HKEY_LOCAL_MACHINE\hardware\ACPI
8:HKEY_LOCAL_MACHINE\hardware\ACPI\DSDT
10:HKEY_LOCAL_MACHINE\hardware\ACPI\DSDT\INTELR
12:HKEY_LOCAL_MACHINE\hardware\ACPI\DSDT\INTELR\AWRDACPI
14:HKEY_LOCAL_MACHINE\hardware\ACPI\DSDT\INTELR\AWRDACPI\00001000
17:HKEY_LOCAL_MACHINE\hardware\ACPI\FACS
20:HKEY_LOCAL_MACHINE\hardware\ACPI\FADT
22:HKEY_LOCAL_MACHINE\hardware\ACPI\FADT\IntelR
24:HKEY_LOCAL_MACHINE\hardware\ACPI\FADT\IntelR\AWRDACPI
26:HKEY_LOCAL_MACHINE\hardware\ACPI\FADT\IntelR\AWRDACPI\42302e31
29:HKEY_LOCAL_MACHINE\hardware\ACPI\RSDT
31:HKEY_LOCAL_MACHINE\hardware\ACPI\RSDT\IntelR
33:HKEY_LOCAL_MACHINE\hardware\ACPI\RSDT\IntelR\AWRDACPI
35:HKEY_LOCAL_MACHINE\hardware\ACPI\RSDT\IntelR\AWRDACPI\42302e31
38:HKEY_LOCAL_MACHINE\hardware\DESCRIPTION
40:HKEY_LOCAL_MACHINE\hardware\DESCRIPTION\System
46: VideoBiosDate REG_SZ 04/11/02
48:HKEY_LOCAL_MACHINE\hardware\DESCRIPTION\System\CentralProcessor
50:HKEY_LOCAL_MACHINE\hardware\DESCRIPTION\System\CentralProcessor\0

------------------
ничего не пойму - часть кода
:_2
echo %~1|find /i "HKEY_LOCAL_MACHINE\hardware" &&(set "var=%~1" &goto:next1)
goto:eof
выбрасывает меня на 172-ой строке, вместо 48-ой



[/more]


Код: mode con lines=6000
cd\

for /f "tokens=*" %%i in ('reg query "hklm\hardware" /s ^|findstr /i /n "HKEY_LOCAL_MACHINE\hardware VideoBiosDate"') do call:_1 "%%i"
for /f "skip=%skip1% tokens=*" %%i in ('reg query "hklm\hardware" /s ^|findstr /i "HKEY_LOCAL_MACHINE\hardware VideoBiosDate"') do call:_2 "%%i"
goto:eof

:next1
echo _%var%_
pause

:_1
echo %~1|find /i "VideoBiosDate" &&for /f "tokens=1 delims=:" %%a in ('echo %~1') do set "skip1=%%a"
goto:eof

:_2
echo %~1|find /i "HKEY_LOCAL_MACHINE\hardware" &&(set "var=%~1" &goto:next1)
goto:eof
Автор: Kirillhome
Дата сообщения: 19.01.2010 12:09
vov4ka

Цитата:
Да, это надо сделать на нескольких компах!Что Вы подразумеваете под понятием "Автоматизация"?

Именно это и подразумеваю - сделать однотипное действие на нескольких компьютерах (или - с некоторой регулярностью и т.п.)


Цитата:
какую прогу посоветуете использовать вместо стд. планировщика,желательно компактную

А зачем? Чем не устраивает "планировщик задач"???
Автор: wolf0425
Дата сообщения: 19.01.2010 12:43

Цитата:
и где строки № 5, 7 и другие "недостающие" (см. первый листинг) ??
ты выведи этот текст сначала в файл, и посмотри - чего там на 5,7,48 и прочих странных строках. скорее всего 5,7 пустые - таких много в листинге reg query "hklm\hardware" /s >file.txt

а еще можешь попробовать использовать find a не findstr - у них разные ограничения на текст.
Автор: Kirillhome
Дата сообщения: 19.01.2010 12:47
mugil_cephalus
Вот так???

Код:
@echo off
for /f "tokens=*" %%i in ('reg query "hklm\hardware" /s ^|findstr /i /n VideoBiosDate 2^>nul') do @echo "%%i"
Автор: mugil_cephalus
Дата сообщения: 19.01.2010 12:51
wolf0425
Kirillhome
вот пропавшие строки:
F:\>reg query "hklm\hardware" /s |more

HKEY_LOCAL_MACHINE\hardware\ACPI\DSDT\INTELR\AWRDACPI\00001000
00000000 REG_BINARY 44534454124200000162494E54454C524157524441435049001000004D5346540E000001102C5C5F50525F5B83115C2E5F50525F435055300
000000000005B83115C2E5F50525F43505531010000000000085C5F53305F120A040A000A000A000A00085C5F53315F120A040A010A000A000A00085C5353335F120A040A050A000A
000A00085C5F53345F120A040A060A000A000A00085C5F53355F120A040A070A000A000A0008464C41470A0008535441540A005B805C44454247010A800A015B810C5C44454247014
4424731085B804558544D000C30F80F000A105B81294558544D02524F4D3110524D533110524F4D3210524D533210524F4D3310524D533310414D454D205B805C534D4943010AB20A

Kirillhome
про
Цитата:
2^>nul'
тоже думал, но, судя по всему stderr тоже выводиться - так как
FINDSTR: Слишком длинная строка 15.
FINDSTR: Слишком длинная строка 125.
FINDSTR: Слишком длинная строка 286

p.s.
поставлю счетчик на stdout и stderr

p.p.s.
вообще, - задача заказчика - найти в корневом разделе HKEY_LOCAL_MACHINE\SYSTEM и далее в любом вложенном в него подразделе, подраздел с неизвестным именем, но с известным параметром - D3DOGL_70835937 (и потом поменять значение этого параметра)
Автор: Kirillhome
Дата сообщения: 19.01.2010 12:56
mugil_cephalus - ну тогда, как подсказал wolf0425 - не FindStr, а Find


Код:
@echo off
for /f "tokens=*" %%i in ('reg query "hklm\hardware" /s ^|find /i /n "VideoBiosDate"') do @echo "%%i"
Автор: wolf0425
Дата сообщения: 19.01.2010 13:03
а вообще странно что findstr спотыкается на строках всего в 512+ символов, я думал предел больше.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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