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

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

Автор: JohnRD
Дата сообщения: 13.03.2007 17:23
igor_andreev
у меня наверно неправильная логика но вот что получилось


Код: type 1.INI | gsar -s"iKeyLogOn=-" -r"iKeyLogOn=+" -F >2.INI
type 2.INI | find /I "iKeyLogOn=+" && goto C ##нужно ли обработать если не нашел??
addline iKeyLogOn=+ 10 2.INI && (type 2.INI | gsar -s"IKEYLOGON=+" -r"iKeyLogOn=+" -F >3.INI & goto F)

:C
copy /y 2.INI 1.INI && goto :EOF

:F
copy /y 3.INI 1.INI
Автор: Levitant
Дата сообщения: 13.03.2007 17:45
Народ помогите плиз. Нужно скопировать папку в другое место.
команда хкопи не помогает. Пишу вот так:
Код: xcopy "E:\Документы\Документы" H:\1c /s /e /h /y
Автор: Ramazan
Дата сообщения: 13.03.2007 17:52
Levitant
Скорее всего, cmd-файл в кодировке 1251. Необходима 866. Или можно в начало файла добавить

Цитата:
chcp 1251

Кракозябры останутся, но копирование пройдет.
Автор: aka_ShadowZ
Дата сообщения: 14.03.2007 00:08
Levitant

Код: xcopy "E:\Документы\Итого.задание\Курс._по_1с" H:\1c\ /s /e /h /y
Автор: euheny
Дата сообщения: 14.03.2007 04:40
Существует ли способ , с помощью которого было бы возможно направлять скрипт по разным путям , в зависимости от compi , на котором он запускается (мой или чужой) .
Также тот же вариант , только в зависимости от свободной виртуальной памяти.
Автор: Maza Faka
Дата сообщения: 14.03.2007 07:29
euheny
Смотри в сторону "IF"
Проверить комп, свой он или чужой, можно так:

Код: If not %USERNAME%==Имя пользователя...
Автор: KapralBel
Дата сообщения: 14.03.2007 09:49
Maza Faka
Если на то пошло то проверка не по имени пользователя (%USERNAME%) а по имени компа (%COMPUTERNAME%)
Автор: Simoid
Дата сообщения: 14.03.2007 17:22
Очередная загадка к знатокам:
В папку попадают файлы, которые были разрезаны методом "RapidKill" (Total Commander). Не знаю как его по другому описать. Но в "Тотале" есть кнопка "Разбить файл" и "Собрать файлы". Вот об этом и пойдет речь.

Для склеивания файлов требуется постоянно запускать TC и проделывать монотонную многозадачную операцию.

Хотелось бы иметь такой батник, который склеивал бы файлы
xxx.001
xxx.002
.
.
.
.
xxx.nnn

в один xxx.rar.

И проверял контрольную сумму из xxx.CRC. Если сумма правильная - то удалять части. Если нет - удалять склеенный "недодел".

Не судите строго. Возможно заоблачное желание появилось и с ним с помощью губозакаточного станка бороться нужно. Но вдруг кто то поможет мне в этом "нелегком" деле
Автор: KapralBel
Дата сообщения: 14.03.2007 17:30
Simoid
Склеивание просто
copy /b xxx.001+xxx.002+xxx.003 xxx.rar

Сегодня полностью батничек не напишу - под рукой нет тотала, что бы посмотреть как точно он разбивает файл
Автор: igor_andreev
Дата сообщения: 14.03.2007 17:40
Simoid
Проверять CRC тоже просто, берешь fsum и проверяешь. Так прям, как у тебя, в батнике и будет:

Код:
FSUM проверить контрольную сумму из xxx.CRC
Если сумма==правильная (то удалять части) если нет - удалять склеенный "недодел".
Автор: NIKZZZZ
Дата сообщения: 14.03.2007 17:59
KapralBel

Цитата:
copy /b xxx.001+xxx.002+xxx.003 xxx.rar

Total разбивает нормально, такой строкой я пользовался.


Автор: KapralBel
Дата сообщения: 14.03.2007 18:14
NIKZZZZ
Я тоталом не пользуюсь поэтому:
1. Мне надо разбить им файл что бы посмотреть как,что и что в файле *.crc (уже сделал)
2. (и самое главное) количество частей может быть разное - поэтому надо писать батничек, который анализирует количество частей, расширение файла и т.д.
А то если ручками эту строку набирать - ничемс не будет отличаться от той-же работы в тотале

Автор: stegmatik
Дата сообщения: 14.03.2007 21:58
    помогите мне плиз с батничком. зациклился на одном моменте... как создать папку имя которой будет текущая дата в формате DDMM
помогите чем сможите,заранее благодарен!!!
Автор: ViSiToR
Дата сообщения: 14.03.2007 22:06
stegmatik

Цитата:
как создать папку имя которой будет текущая дата в формате DDMM


Можно так:


Код: MD "%date:~0,-4%"
Автор: stegmatik
Дата сообщения: 14.03.2007 22:19
ViSiToR


спасибо,попробовал создало мне папку с именем 14.03..но нада чтоб папка называлась 0314 ....
Автор: ViSiToR
Дата сообщения: 14.03.2007 22:57
stegmatik

Цитата:
нада чтоб папка называлась 0314

Можно так:


Код: Set DirName=%date:~0,-5%
MD %DirName:~3%%DirName:~0,-3%
Автор: stegmatik
Дата сообщения: 14.03.2007 23:17
пасибки,ты мне жизнь спас!!!

Автор: Elroir
Дата сообщения: 14.03.2007 23:40
Simoid

Код:
@echo off
setlocal enabledelayedexpansion
set "command_string=copy /b"
del /q "%temp%\file_list" 2>nul
for /l %%a in (1,1,1000) do (
if %%a LSS 100 set "ext=0%%a"
if %%a LSS 10 set "ext=00%%a"
if exist "%~n1.!ext!" (
set found=yes
set "command_string=!command_string! "%~n1.!ext!" +"
echo "%~n1.!ext!">>"%temp%\file_list"
)
)
set command_string=%command_string:~0,-1% "%~n1.rar"
if not defined found goto :EOF
%command_string%>nul
if not exist "%~n1.crc" (
echo CRC file not found - unable to check integrity
goto :EOF
)
for /f "skip=2 delims== tokens=2" %%b in (%~ns1.crc) do echo %~n1.rar %%b>_crc.sfv
fsum -c _crc.sfv>nul 2>nul
if not "%errorlevel%"=="0" (
del /q "%~n1.rar" 2>nul
echo Merge failed
) else (
for /f "tokens=*" %%A in (%temp%\file_list) do del /q %%A
del /q "%~n1.crc" 2>nul
echo Merge succeeded
)
del /q "%temp%\file_list" 2>nul
del /q _crc.sfv 2>nul
Автор: WSQ
Дата сообщения: 15.03.2007 00:08
По поводу замены текста в файле (пример в шапке)
ещё есть утилита sed - Windows версия
Примерное использование:
sed -e "s/строка-поиска1/строка-замены1/g" "s/строка-поиска2/строка-замены2/g" file1 > file2
способна при одном проходе делать сразу несколько замен. При больших объёмах текста и количества замен способна сэкономить время.
Автор: stegmatik
Дата сообщения: 15.03.2007 00:27
чёт у меня не получается...


xcopy D:\temp\test d:\temp\%DirName:~3%%DirName:~0,-3%\test /s

не копируется папка test в %DirName:~3%%DirName:~0,-3% может потому что папка пустая?? но я прбовал с /e вместо /s тоже самое...
Автор: Elroir
Дата сообщения: 15.03.2007 00:33
stegmatik

Цитата:
не копируется папка test в %DirName:~3%%DirName:~0,-3% может потому что папка пустая??

Именно поэтому и не копируется. Попробуй так:

Код:
Set DirName=%date:~0,-5%
MD d:\temp\%DirName:~3%%DirName:~0,-3%\test
xcopy D:\temp\test d:\temp\%DirName:~3%%DirName:~0,-3%\test\ /s
Автор: stegmatik
Дата сообщения: 15.03.2007 00:38
получилось!!!!
а как создать папку ,чтоб её имя было вчерашняя дата???
Автор: Elroir
Дата сообщения: 15.03.2007 00:43
stegmatik

Цитата:
а как сделать папку со вчерашней датой???

Посмотри примеры в шапке - http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=0&limit=1&m=3#1
Автор: ViSiToR
Дата сообщения: 15.03.2007 01:16
WSQ

Цитата:
ещё есть утилита sed - Windows версия

А она регистрозависема? (регистр букв играет роль).


Цитата:
способна при одном проходе делать сразу несколько замен.

Да вроде и та что в шапке это умеет.
Автор: Tipulatoid
Дата сообщения: 15.03.2007 04:03
Elroir

Цитата:
Батник запускается с одним аргументом - именем одной из частей...

Крутой код Есть чему поучиться.
Автор: euheny
Дата сообщения: 15.03.2007 04:17
KapralBel
Да имя компа у меня как раз уникальное , а вот юзверь на всех компах один - system.
На этом форуме как нигде работает принцип две головы.
Однако как с этим
Цитата:
в зависимости от свободной виртуальной памяти

Сюда подойдёт и общий размер RAM , который в свойствах светится.
Автор: Maza Faka
Дата сообщения: 15.03.2007 08:41
euheny

Цитата:
В зависимости от свободной виртуальной памяти


Вот:

Код:
@Echo off
For /F "Tokens=*" %%a in ('SystemInfo') do (
For /F "Tokens=1,2,3,4" %%k in ("%%a") do (
If "%%m"=="доступно:" (
Set "freeMem=%%n"
)
)
)
If "%freeMem%" gtr "1 000" Copy MyFile.exe C:\MyProgram
If "%freeMem%" lss "1 000" Echo Error!!
Автор: KapralBel
Дата сообщения: 15.03.2007 09:42
Simoid
Еще один батничек по работе с CRC


Код: @Echo Off
chcp 1251 >Nul
md Tmp >Nul 2>&1
For %%a in (*.crc) Do Call :crc1 %%~sa
GoTO :EOF

:crc1
Set flSize=0
Set flName=q
Set flNameN=q
Set flCRC32=0
For /F "tokens=1-2 delims==" %%a in (%1) Do Call :crc2 %%a "%%b" "%%~nb"
Set flSize=%flSize:~1%
Set flSize=%flSize:~,-1%
Set flCRC32=%flCRC32:~1%
Set flCRC32=%flCRC32:~,-1%
Set flName=%flName:~1%
Set flName=%flName:~,-1%
Set flNameN=%flNameN:~1%
Set flNameN=%flNameN:~,-1%
For %%a in ("%flNameN%.*") Do call :crc3 "%%a"
CRC32 "Tmp\%flName%">Tmp\CRC.txt
For /F "tokens=1-2 delims=:" %%a in (Tmp\CRC.txt) Do Set flCRC32Calc=%%b
Set flCRC32Calc=%flCRC32Calc:~1%
If /i %flCRC32Calc% == %flCRC32% GoTo :CRC32_OK
GoTo :CRC32_Fail
GoTo :EOF

:crc2
If /i %1==size Set flSize=%2
If /i %1==crc32 Set flCRC32=%2
If /i %1==filename (Set flName=%2) & (Set flNameN=%3)
GoTo :EOF

:CRC3
Set n=%1
Set flExt=%n:~-4%
Set flExt=%flExt:~0,3%
If /i %flExt% == crc GoTo :EOF
If %flExt% == 002 (Copy /b "%flNameN%.001"+"%flNameN%.002" "Tmp\%flName%" >Nul) & (GoTo :EOF)
If %flExt% == 001 GoTo :EOF
Copy /b "Tmp\%flName%"+%N% "Tmp\%flName%" >Nul
GoTo :EOF


:CRC32_OK
Echo "Tmp\%flName%" - OK
GoTo :EOF

:CRC32_Fail
Echo "Tmp\%flName%" - CRC32 неверный
GoTo :EOF
Автор: igor_andreev
Дата сообщения: 15.03.2007 10:59
Помню, году так в 2002, мне надо было с древнего компа малость инфы вытащить, а на нем ни USB, ни естественно пишущего сидюка, никаких коммуникаций. Нашлась у знакомого Iomega ZIP, был такой девайс до изобретения флешек, втыкался в LPT, похож на дискету 1.44, только вмещал в себя аж 100 Мб. Никаких файл-менеджеров на компе не было, батники я тогда писать почти не умел, только самые простейшие, но был WinRAR, так я положил в папку SendTo батник типа(ну недословно):
rar a -v10485760b -m5 -rr3p "%~dpn1" %1
и отправлял нужные папки(не файлы) по одной на этот батник. Вполне мило покрошил все на куски по 10 Мб и перенес на другой комп.

А щас вот подумал, почему бы и Simoid не прикрутить для этого дела RAR к Тоталу? Резать файлы - это я так подозреваю, куда-то надо переносить и не факт, что не забудешь взять с собой батник и утиль для проверки CRC. А WinRAR сам отлично и разрежет и CRC проверит и самое огромное преимущество - добавит инфу для восстановления или вообще отдельный том для восстановления. И sfx сделает, если надо. В Far-e такое точно легко сделать, в Farmenu.ini добавить буквально пару строчек вроде:
: Create !.rar Volumes
start /min rar a -v!?Size of each volume b,k,m?1456664b! -rr5p ! !.!
эт без проверки, у меня надобности файлы резать нет и пункта такого в меню нет, но как-нить так делается, ключи rar.exe по вкусу добавить... В Тотале наверно тоже можно на какую-нибудь комбинацию клавиш повесить
Автор: Nagual
Дата сообщения: 15.03.2007 15:00
igor_andreev
абсолютно согласен, винрар для этой задачи выглядит намного логичнее, раньше тоже пользовал резаком тотала, пока не узнал, что винрар это тоже умеет делать, а главное, поскольку винрар чаще найдешь на разных тачках, чем тотал, то и универсальность метода, использующего винрар, выше.
Здесь хочу укзать еще одно немаловажное преимущество винрара, то, что он еще и жмет файл, уменьшая его в размерах

насчет проигрывания звука:
как оказалось, надо пользовать библиотеку winmm.dll
на INNO это делается так:

***
[Code]
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';
procedure InitializeWizard();
begin
sndPlaySound(ExpandConstant('дзинь.wav'), $0001);
end;
***
ну а в принципе, это и надо было делать в инсталляхе

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


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