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

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

Автор: Free_Soft
Дата сообщения: 16.11.2010 21:37
01MDM
Признателен) работает и без setlocal. или он здесь критичен? просто код будет вставляться в другой батник
Автор: 01MDM
Дата сообщения: 16.11.2010 21:56
Free_Soft

Что-то там не совсем так, например пройдет "XXXXX!" или "XXXXX;"
Попробую доработать. Setlocal на случай если запускать из консоли несколько раз. Без него %cnt% будет продолжать прибавляться.
Автор: Free_Soft
Дата сообщения: 16.11.2010 22:00

Цитата:
Setlocal на случай если запускать из консоли несколько раз. Без него %cnt% будет продолжать прибавляться.

ммм... там будут еще счетчики, которые как раз должны прибавляться..
Автор: 01MDM
Дата сообщения: 16.11.2010 22:29
Free_Soft,
Потестируй такой вариант, вроде работает

Код:
@echo off

set "invalid="
set "cnt=0"
set "key=null"

set /p key="Enter key: "

for %%i in ("%key:-=","%") do (

    echo "%%i" | 1>nul findstr "\<\"[a-Z0-9][a-Z0-9][a-Z0-9][a-Z0-9][a-Z0-9]\"\>" || set "invalid=1"
    set /a cnt+=1

)

if not %cnt%==5 set "invalid=1"
if defined invalid echo "%key%" is invalid value for key
Автор: Free_Soft
Дата сообщения: 16.11.2010 22:37
Спс, на вскидку вроде все ок, потом еще погоняю

Добавлено:
Еще вопрос.. возможно, уже поднимался
нужно создать папку с именем в формате ddmmyy-hhmmss. как из %date% и %time% выдрать разделители?
Автор: BVV63
Дата сообщения: 17.11.2010 04:17
Free_Soft
Ради универсальности лучше не использовать переменные %Date% и %Time%, поскольку они привязаны к формату короткой даты и времени текущего пользователя. Лучше так:

Код: For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`WMIC OS Get LocalDateTime /Value`) Do Set LocalDateTime=%%0
MD <Path>\%LocalDateTime:~2,6%-%LocalDateTime:~8,6%
Автор: Free_Soft
Дата сообщения: 17.11.2010 07:58
BVV63

Цитата:
Лучше так:

Да, действительно лучше) пасиб
Автор: BVV63
Дата сообщения: 17.11.2010 08:11
Free_Soft

Код: For /F "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`WMIC OS Get LocalDateTime /Value`) Do Set LocalDateTime=%%0
Echo %LocalDateTime:~2,2%.%LocalDateTime:~4,2%.%LocalDateTime:~6,2%-%LocalDateTime:~8,2%.%LocalDateTime:~10,2%.%LocalDateTime:~12,2%
Автор: Free_Soft
Дата сообщения: 17.11.2010 08:15
BVV63
нет, просто пытался сам сделать, но запутался во фрагментах
Автор: stydent62
Дата сообщения: 17.11.2010 12:45
как решить такую задачу с помощью bat-файла. В одной директории несколько папок (есть вложенные) с файлами. Необходимо скопировать файлы по маске *.usr из всех папок (подпапок ) в одну папку и при совпадении имени файла чтобы файл автоматически переименовывался. Заранее благодарю.
P.S. total commander для решения задачи не подходит, нужно именно батником.
Автор: 01MDM
Дата сообщения: 17.11.2010 19:19
stydent62

Не проверял:

Код:
@echo off
setlocal
1>nul chcp 1251

for /r "C:\Folder 1" %%i in (*.usr) do call:copy "%%i"
goto:eof

:copy
set "toCopy=%~nx1"

:check
if exist "C:\Folder 2\%toCopy%" (

set "toCopy=0%toCopy%"
goto:check

)

copy %1 "C:\Folder 2\%toCopy%"
Автор: Free_Soft
Дата сообщения: 17.11.2010 20:40
есть некий reg файл. нужно строки вида
Код: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
Автор: wolf0425
Дата сообщения: 17.11.2010 22:51
Free_Soft

Цитата:
Нужно строки вида преобразовать в и наоборот
например так:

Код: sed "s/HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node/HKEY_LOCAL_MACHINE\\##/gi; s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node/gi; s/HKEY_LOCAL_MACHINE\\##/HKEY_LOCAL_MACHINE\\SOFTWARE/gi" <file.txt >file2.txt
Автор: Free_Soft
Дата сообщения: 17.11.2010 23:18
wolf0425
спасибо, буду пробовать. Еще столкнулся с проблемой: при экспорте ветки реестра в reg файле вместо кириллицы крякозябры.

Код: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration\{xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}]
"ProductCode"="{90140000-0011-0000-0000-0000000FF1CE}"
"ProductName"="Microsoft Office профессиональный плюс 2010"
"ProductNameBrand"="Microsoft Office профессиональный плюс 2010"
"SuiteName"="Включено в Microsoft Office профессиональный плюс 2010"
Автор: BVV63
Дата сообщения: 18.11.2010 04:12
Free_Soft
Как экспортируете? По-умолчанию (используется Unicode), либо в формате 9x/NT4 (используется ANSI)?
Автор: Free_Soft
Дата сообщения: 18.11.2010 08:47
BVV63
REG EXPORT. Можно как то поменять кодировку? или еще как то можно экспортировать?
Автор: iMASTERVP
Дата сообщения: 18.11.2010 09:00
Помогите пожалуйста!! уменя такая проблема
1. я Чайник в этом деле!!
2. необходимо чтобы бат файл выполнял следующее:
операционная система WIN XP SP3

1. сразу после загрузки системы запускал сетевое подключение!
2. начинал пинговать определенный ресурс,
3. если пинги пошли запускал браузер IE
4. если браузер не отображает страниц чтобы обновлялся до тех пор пока не обновит!
2. если пинги пропали на какоето время, чтобы перезапустил сетевое подлючение и браузер или перезагрузил компьютер

Вот такая штука мне нужна очень очень!!!! помогите пожалуйста если можете!! за ранее спасибо
Автор: Accessor
Дата сообщения: 18.11.2010 09:12
Free_Soft
Цитата:
или еще как то можно экспортировать?
можно с помощью
Код: regedit.exe /s regfile.reg
Автор: Free_Soft
Дата сообщения: 18.11.2010 09:16

Цитата:
regedit.exe /s regfile.reg

это импорт файла
Автор: Accessor
Дата сообщения: 18.11.2010 09:42
Free_Soft
сорри, надо вот так:
regedit /ea RegFile.reg HKEY_CURRENT_USER\Software\...
Автор: Free_Soft
Дата сообщения: 18.11.2010 10:06
Accessor
Да, теперь все ок. Пасиб

Добавлено:
а можно ли из батника узнать язык системы?
Автор: bomzzz
Дата сообщения: 18.11.2010 17:17
Free_Soft
http://bomz-co.narod.ru/current.exe - вот эта не будет зависеть от языка

Добавлено:
но лучше проверить. англоязычная винда есть в HirenBootCD

Добавлено:


убрать кнопку создать папку можно так - просто другое окно использовать которое вот так выглядит

Добавлено:
из батника язык можно узнать - как не помню. не сталкивался с необходимостью

Добавлено:
сделал чтоб кнопки не было это параметром меняется. не помню ни фига уже.

Добавлено:
но оно не по центру екрана стало вылазить

Добавлено:
оно теперь привязано к батнику

Добавлено:
проверяй пока я помню как делать
Автор: Free_Soft
Дата сообщения: 18.11.2010 17:42
bomzzz
Это окно даже лучше.

Цитата:
оно теперь привязано к батнику

В смысле должно открываться из той же директории? Тогда не работает
Автор: bomzzz
Дата сообщения: 18.11.2010 17:42
отцентровать тут надо разбираться.
http://www.manhunter.ru/assembler/236_tyuning_funkcii_shbrowseforfolder.html


Цитата:

    .386
    .model flat,stdcall
    option casemap:none
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\shell32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\shell32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

.data?
PATH            db MAX_PATH dup(?)
String            db MAX_PATH dup(?)
brinfo            BROWSEINFO <>
mestitle        dd ?
;StringLen        dd ?

.data
;OKButton        db 12h, 04h, 4Bh, 04h, 31h, 04h, 40h, 04h, 30h, 04h, 42h, 04h, 4Ch, 04h, 0, 0

.code
start:

    invoke GetCommandLine            ; вызываем функцию командной строки в eax возврщается смещение
    Call MyProc                ; проматываем до первого обратного слеша
    mov ebx, eax                ; сохраним смещение на первый параметр
    Call MyProc                ; проматываем до второго слеша
    mov mestitle, eax            ; сохраним смещениена второйпараметр
                        ; заполним BROWSEINFO структуру
    mov brinfo.hwndOwner, 0            ; хендл родительского окна, здесь - ноль.
    mov brinfo.pidlRoot,0            ; PIDL - характеризует корневую папку с которой начинается обзор
    mov brinfo.pszDisplayName, offset PATH    ; указатель строки выбранного пути
    mov brinfo.lpszTitle, ebx        ; указатель строки которая выводится над окном дерева папок
    mov brinfo.ulFlags, BIF_RETURNONLYFSDIRS; BIF_USENEWUI    ; флаги которые определяют функции и вид диалогового окна
    mov brinfo.lpfn, BrowseCallbackProc    ; указатель пользовательской функции события, которую вызывает диалоговое окно
    mov brinfo.lParam, NULL            ; An application-defined value that the dialog box passes to the callback function, if one is specified in lpfn.
    mov brinfo.iImage, NULL            ; An integer value that receives the index of the image associated with the selected folder, stored in the system image list.

    invoke SHBrowseForFolder, ADDR brinfo    ; вызываем функцию окна выбора папки
    .IF eax!=0                ; 0 - ничего не выбрано
    push eax                ; сохраним ID папки
    invoke SHGetPathFromIDList,eax,addr PATH    ; конвертируем ID в путь
    invoke CharToOem, addr PATH, addr String    ; меняем кодировку строки пути

    invoke lstrlen,addr PATH
    lea ebx, String
    add ebx,eax
    mov byte ptr[ebx],0Dh
    inc ebx
    mov byte ptr[ebx],0Ah
    inc ebx
    mov byte ptr[ebx],0
    invoke StdOut,ADDR String

    pop eax                    ; вытащим ID папки
    .ENDIF
    invoke    ExitProcess,eax            ; выходим из программы, eax - код возврата

BrowseCallbackProc proc hwnd:DWORD,uMsg:DWORD,lParam:DWORD,lpData    ; подпрограмма диалогового окна выбора папки
    .IF uMsg==BFFM_INITIALIZED
; invoke SendMessage,hwnd,BFFM_SETOKTEXT,NULL,addr OKButton    ; меняем текст на кнопке ОК (юникод)
invoke SetWindowText,hwnd,mestitle                ; меняем заголовок окна
    .ENDIF
xor eax,eax
ret
BrowseCallbackProc endp

MyProc proc            ; подпрограмма разбора командной строки
next:                ; метка цикла
    cmp byte ptr[eax],'/'    ; знак равен обратному слешу?
    je found        ; если да выходим
    cmp byte ptr[eax],0    ; знак равен 0 - конец строки?
    jz esit            ; если да выходим из подпрограммы
    inc eax            ; увеличиваем смещение на 1 - переводим указатель на следующий знак
    jmp next        ; в начало цикла
found:
    mov byte ptr[eax], 0    ; заменяем обратный слеш на 0 - делитель строки
    inc eax            ; переводим укзатель на следующий знак
esit:
    Ret            ; возвращаемся в программу
MyProc endp

end start            ; конец ассемблирования

; ассемблирование
;C:\masm32\bin\ml.exe /c /coff current.asm
;C:\masm32\bin\link.exe /subsystem:console current.obj
http://www.masm32.com/masmdl.htm




Добавлено:
нет - то окно вроде как открывалос ьв центре екрана , а это всегда приялпано к батнику.

Добавлено:
не могу понять почему. надо мсдн читать.

http://msdn.microsoft.com/en-us/library/bb762115%28VS.85%29.aspx
Автор: Free_Soft
Дата сообщения: 18.11.2010 17:45
bomzzz
центр не важен. батник все равно будет скрыт. важно открытие из директории
Автор: bomzzz
Дата сообщения: 18.11.2010 17:52
чтоб параметр добавить для директории по умолчанию? или чтоб открывалась та в которой лежит програмка?
Автор: Free_Soft
Дата сообщения: 18.11.2010 17:54
bomzzz
нет, из указанной в параметре директории. если можно
Автор: bomzzz
Дата сообщения: 18.11.2010 18:04
щас попробую - отцентровать просто кстати

; Установить окно по центру экрана
stdcall WindowToCenter,[hwnd],0

Добавлено:
скачай по новой и проверяй как работает вроде нет конфликтов

ECHO OFF
COLOR 9F
CLS
FOR /f "delims=*" %%I IN ( 'current.EXE /TITLE/SUBTITLE/C:\Temp' ) DO SET G=%%I
ECHO %G%
pause

Добавлено:
параметр я опустил - работает, задал несуществующую папку- работает. вроде правильно всё

Добавлено:
будет ли она на другиз системах работать я не знаю потому что проверить не могу.ю надпись по русски я убрал - остальные защиты в систему. как будет работать строка
invoke CharToOem, addr PATH, addr String ; меняем кодировку строки пути
надо проверить вообще я так понимаю она должна работать вообще на любой винде не только английской но и с любым языком в путях. ну а как проверишь?

Добавлено:
я на форуме масма спрашивал и хоть там не только англоязычные посетители чета мине никто не ответил.

Добавлено:
а там многие переходят на масм с С и вообще много консольных прог пишут, но вот чета кодировку никто не меняет. хз почему
Автор: Free_Soft
Дата сообщения: 18.11.2010 18:35
bomzzz
ок, проверю, отпишусь
Автор: bomzzz
Дата сообщения: 18.11.2010 19:11

Цитата:

ECHO OFF
COLOR 9F
CLS
chcp 1251
FOR /f "delims=*" %%I IN ( 'current.EXE /TITLE/SUBTITLE/E:\папочка моя' ) DO SET G=%%I
ECHO %G%
pause

так тоже работает

Добавлено:
http://bomz-co.narod.ru/current1.exe вот отцентровал, не так просто оказалось. эта всегда будет вылазить в центр екрана

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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