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

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

Автор: king_stiven
Дата сообщения: 17.10.2010 18:47
Есть .js скрипт запускающий блокнот в скрытом виде

Код: var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("notepad",0);
Автор: res2001
Дата сообщения: 17.10.2010 19:17
serg3001
Странные имена файлов у тебя получились.
Исходные файлы a.txt,b.txt,c.txt у тебя в какой кодировке? Может быть в UTF?
Автор: serg3001
Дата сообщения: 17.10.2010 19:33
res2001
пробелы в конце строк удалил.
голову ломаю, никак не пойму почему такое происходит, текст в кодировке Кириллическая Windows (1251)
Автор: res2001
Дата сообщения: 17.10.2010 19:40
serg3001
Переведи исходные файлы в ДОС кодировки и прогони батник.
Автор: serg3001
Дата сообщения: 17.10.2010 19:45
УРА, всё получилось!

А как убрать пробелы перед двоеточием :
0163 :42301810813005338766 :500.00 :€ў -®ў €ў - €ў -®ўЁз:
054 :42307810313001101365 :1000.00 :ЏҐва®ў ЏҐва ЏҐва®ўЁз:
Автор: res2001
Дата сообщения: 17.10.2010 19:50
Вот вариант для работы в кодировке 1251:

Код: @echo off
>nul chcp 1251
SetLocal EnableDelayedExpansion
set "tmpfile=abc.txt"
del /f/q %tmpfile%
for /f "tokens=1,* delims=|" %%a in (a.txt) do (
for /f "tokens=1,2,* delims=|" %%c in ('find "%%a" b.txt ^| more +2') do set "bstr=%%c|%%e" & set "cf=%%c"
for /f "tokens=1,2 delims=|" %%c in ('find "!cf!" c.txt ^| more +2') do set "cstr=%%d"
>>%tmpfile% echo.%%a^|%%b^|!bstr!^|!cstr!
)
for /f "tokens=1-7 delims=|" %%a in (%tmpfile%) do >>%%b.txt echo.%%g:%%f:%%c:%%e:
del /f/q %tmpfile%
Автор: serg3001
Дата сообщения: 17.10.2010 19:58
res2001

странно вот в АВВ без пробелов 0164:42306810913005834330:1000.00:Сидоров Сидор Сидорович:
а в АВБ
0163 :42301810813005338766 :500.00 :Иванов Иван Иванович:
054 :42307810313001101365 :1000.00 :Петров Петр Петрович:

ещё можно ли влепить двоеточие между всеми ФИО - Петров:Петр:Петрович ?
Автор: res2001
Дата сообщения: 17.10.2010 20:05
serg3001

Цитата:
странно вот в АВВ без пробелов

Смотри в исходных файлах в конце строк, наверняка есть пробел.

Цитата:
ещё можно ли влепить двоеточие между всеми ФИО - Петров:Петр:Петрович ?


Код: @echo off
>nul chcp 1251
SetLocal EnableDelayedExpansion
set "tmpfile=abc.txt"
del /f/q %tmpfile%
for /f "tokens=1,* delims=|" %%a in (a.txt) do (
    for /f "tokens=1,2,* delims=|" %%c in ('type b.txt ^| find "%%a" ') do set "bstr=%%c|%%e" & set "cf=%%c"
    for /f "tokens=1,2 delims=|" %%c in ('type c.txt ^| find "!cf!" ') do set "cstr=%%d"
    >>%tmpfile% echo.%%a^|%%b^|!bstr!^|!cstr!
)
for /f "tokens=1-7 delims=|" %%a in (%tmpfile%) do (
    for /f "tokens=1-3" %%x in ("%%e") do >>%%b.txt echo.%%g:%%f:%%c:%%x:%%y:%%z
)
del /f/q %tmpfile%
Автор: serg3001
Дата сообщения: 17.10.2010 20:37
Всё отлично, большое спасибо, видно, что голова спеца сделала так быстро код, молодец.

P.S. Кстати, Каспер показывает при запуске на последнем bat файле PDM.RootShell
Автор: lorents
Дата сообщения: 17.10.2010 22:35
01MDM
спасибо. У меня при попытке просмотреть результат выдает

Цитата:
Режим вывода команд на экран (ECHO) отключен.

Как это исправить?
Автор: 01MDM
Дата сообщения: 17.10.2010 22:42
lorents

Цитата:
Режим вывода команд на экран (ECHO) отключен.

А как ты смотришь? Запускаешь в консоли? Попробуй с паузой:

Код:
@echo off
setlocal

for /f "tokens=2 delims=()" %%i in ('findstr "Block boundaries:" png.log') do call:set %%i
echo %blocks%

pause 1>nul
goto:eof

:set
set "blocks=%1"
Автор: lorents
Дата сообщения: 17.10.2010 23:13
01MDM
в отдельности код работает как надо, но вот так, не хочет


Код: @echo off
setlocal
set Docs="%~dp0Docs\"
PATH %Docs%;%PATH% >nul

for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
pngout -v "%%~fi" > png.log
for /f "tokens=2 delims=()" %%k in ('findstr "Block boundaries:" png.log') do call :set %%k
echo %blocks%
pause
for /L %%j in (0,1,5) do pngout -f%%j -n%block% "%%~fi"
)
Автор: wolf0425
Дата сообщения: 18.10.2010 00:06
lorents

Цитата:
в отдельности код работает как надо, но вот так, не хочет

конечно не хочет, и про то что внутри цикла все %переменные%, в твоем случае %blocks%, заменяются на их значения до начала исполнения цикла - тебе пора бы уже запомнить.

переноси echo %blocks% внутрь подпрограмы :set, или за скобку фора - смотря что хочешь смотреть...
Автор: 01MDM
Дата сообщения: 18.10.2010 07:34
lorents, не знаю что ты делаешь, wolf0425 тебе уже все правильно посоветовал. На мой взгляд может быть так:

Код:
@echo off
setlocal
set Docs="%~dp0Docs\"
set PATH=%Docs%;%PATH%

for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
pngout -v "%%~fi" > png.log
for /f "tokens=2 delims=()" %%k in ('findstr "Block boundaries:" png.log') do call:set "%%i" %%k
)
goto:eof

:set
set blocks=%2
echo %blocks%
for /L %%i in (0,1,5) do pngout -f%%i -n%block% "%%~f1"
Автор: res2001
Дата сообщения: 18.10.2010 08:04
serg3001

Цитата:
P.S. Кстати, Каспер показывает при запуске на последнем bat файле PDM.RootShell. На кодировку видимо реагирует.

даа, вот так и делаются вирусы
Не на кодировку, видимо в коде какая-то часть совпала с PDM.RootShell.
Может не стоит пользоваться этим батником, а то вдруг там действительно вирусняк получился
Автор: lorents
Дата сообщения: 18.10.2010 08:27
wolf0425 точно, спасибо

01MDM
он не видит "%%~f1", выдает, что файл не найден

я сейчас пробую использовать вместо %Переменная% использовать !Переменная!

Добавлено:

Код: @echo off
SetLocal EnableDelayedExpansion

for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
pngout -v "%%~fi" > png.log
for /f "tokens=2 delims=()" %%k in ('findstr "Block boundaries:" png.log') do set f=%%k
    set blocks=!f!
    echo !blocks!
    for /L %%j in (0,1,5) do pngout -f%%j -n!block! -v "%%~fi"
)
Автор: wolf0425
Дата сообщения: 18.10.2010 09:16

Цитата:
вместо допустим 21, выдает 21 blocks Почему так?
п почему тебе кажется, что должно отсекать blocks?
у тебя delims=(), в 21 blocks ни одной скобки нет - что просил то и выдает.
если ты хотел чтоб ещё и по пробелу разграничивало - добавь пробел после ()
только наверно токены пересчитать придется
Автор: lorents
Дата сообщения: 18.10.2010 09:24
wolf0425
Сделал, спасибо

Код: @echo off
SetLocal EnableDelayedExpansion

for /f "delims=" %%i in ('dir /b /s /a-d Dir0\*.png') do (
pngout -v "%%~fi" > png.log
for /f "tokens=4 delims=( " %%k in ('findstr "Block boundaries:" png.log') do set f=%%k
    set blocks=!f!
    echo !blocks!
    del png.log
    for /L %%j in (0,1,5) do pngout -f%%j -n!blocks! -v "%%~fi"
)
Автор: 01MDM
Дата сообщения: 18.10.2010 12:34
lorents

Цитата:
он не видит "%%~f1", выдает, что файл не найден

Мог бы и исправить на "%~f1"

Автор: M1chA
Дата сообщения: 18.10.2010 14:17
Подскажите пожалуйста, как реализовать анализ архивируемых файлов...
Надо архивировать папки пользователей, но не архивировать например *.exe и *.jpg которые находятся в папках.

Сейчас работает батник такого плана:


Код:
@chcp 1251>nul
@echo Запрещен вход на терминал!
@"c:\program files\WinRar\WinRAR.exe" a -u -dh -r -rr5p -os -ow -ms -agDD-MMM-YY -ibck -t -ILOG"D:\Backup\Users.log" "D:\Backup\users.rar" @"D:\Backup\users.txt"
@"c:\program files\WinRar\WinRAR.exe" a -u -dh -r -rr5p -os -ow -ms -agDD-MMM-YY -ibck -t -ILOG"X:\Base\Users.log" "X:\Base\users.rar" @"D:\Backup\users.txt"
@echo Резервная копия пользовательских папок создана!
@change logon /enable
@echo Вход на терминал разрешен!
@net send 192.168.0.100 Резервная копия создана!
@restart
Автор: res2001
Дата сообщения: 18.10.2010 14:45
M1chA
Дык у rara есть опция -x для исключения файлов по маске.
Автор: M1chA
Дата сообщения: 18.10.2010 14:57
res2001

Разобрался,спасибо.
И еще вопрос. А как исключить определённые каталоги из архивирования?
Автор: res2001
Дата сообщения: 18.10.2010 15:07
M1chA
можно даже создать файл где будут перечислены исключаемые файлы.

Цитата:
Покажи пожалуйста примером

дык rar /? посмотри.

Цитата:
А как исключить определённые каталоги из архивирования?

так же как и файлы.

Кстати, зачем используешь winrar.exe, из батника лучше rar.exe юзать, лежит в том же каталоге, он консольный, окошек лишних не открывает.
Автор: M1chA
Дата сообщения: 18.10.2010 15:24
res2001
Проверил,не исключает каталоги...
Автор: res2001
Дата сообщения: 18.10.2010 15:27
M1chA

Цитата:
Проверил,не исключает каталоги...

а если так указать: c:\dir1\dir\*.*

Добавлено:
Самому лень проверять, но я в свое время пользовался этой возможностью.
Поэкспериментируй.
Автор: M1chA
Дата сообщения: 18.10.2010 15:30
res2001

Цитата:
а если так указать: c:\dir1\dir\*.*

Тогда он в каталоге dir не будет архивировать все каталоги,
а надо чтобы в каталоге dir он не архивировал например каталоги 1,2,3 а все остальные архивировал.
Автор: res2001
Дата сообщения: 18.10.2010 15:33
M1chA
дык тогда указывай:
c:\dir1\dir\1\*.*
c:\dir1\dir\2\*.*
c:\dir1\dir\3\*.*
Автор: M1chA
Дата сообщения: 18.10.2010 15:45
res2001
Сделал.
Спасибо за помощь.
Автор: lorents
Дата сообщения: 18.10.2010 18:42
подскажите, пожалуйста, как можно сравнить вес шести файлов, и оставить файл с самым маленьким весом, а все остальные удалить?
Автор: bomzzz
Дата сообщения: 18.10.2010 19:07
lorents
FOR
%~zI Замена %I размером файла.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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