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

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

Автор: wolf0425
Дата сообщения: 29.09.2010 10:31

Цитата:
А в исходных файлах эти символы есть?
Если нет,
похоже что есть, это код BOM в уникодной кодировке.

А вообще - copy /a file1+file2 file3 - у меня исправно сливает файлы UTF-16, вырезая лишний BOM



Кто-нидубь подскажет - поменять Window title у запущенной программы внешними средствами вообще реально?
Автор: BVV63
Дата сообщения: 29.09.2010 10:41
wolf0425

Цитата:
Кто-нидубь подскажет - поменять Window title у запущенной программы внешними средствами вообще реально?

Вроде как PowerShell умеет. В книге Попова А. В. "Введение в Windows PowerShell" в 4-й главе командами PowerShell настраивается оболочка PowerShell в режиме реального времени, включая и заголовок окна, но, как я понимаю, приведённые действия справедливы для окна любой программы.
Автор: Accessor
Дата сообщения: 29.09.2010 10:53
res2001
Увы, в исходных файлах этого символа нет. Его вставляет система ровно на стыке двух файликов.
Что касается ключика /b в команде copy, то я пробовал и с ним тоже. Причём, синтаксис команды позволяет указывать "бинарность" файла в именовании каждого сцепляемого файла, что я и сделал. Увы, тошнотворный символ появляется всё равно.


wolf0425
ну, нет его там. вот даю два файла, что я сливаю в uue
[more=cfg1.v8i]
begin 644 cfg1.v8i
M[[N_6T)!4T4Q70T*0V]N;F5C=#U3<G9R/2(Q.3(N,38X+C$N,2([4F5F/2)B
M87-E,2([#0I)1#TQ93=F8V%B9"TP.&1A+30R9&(M.3,X9"TU86)B.&8Q,S8Q
M9C,-"D]R9&5R26Y,:7-T/3$V-C0P#0I&;VQD97(]+PT*3W)D97));E1R964]
M,38V-#`-"D5X=&5R;F%L/3`-"D-L:65N=$-O;FYE8W1I;VY3<&5E9#U.;W)M
?86P-"D%P<#U!=71O#0I703TQ#0I697)S:6]N/3@N,@``
`
end
sum -r/size 43913/211
[/more]
[more=cfg2.v8i]
begin 644 ibases.v8i
M[[N_6T)!4T4R70T*0V]N;F5C=#U3<G9R/2(Q.3(N,38X+C$N,2([4F5F/2)B
M87-E,B([#0I)1#TT-V0Q8F$W."UA8V9E+30W83<M834S92TW,S-E,&4T,C8S
M868-"D]R9&5R26Y,:7-T/3$V.#DV#0I&;VQD97(]+PT*3W)D97));E1R964]
M,S,P,C0-"D5X=&5R;F%L/3`-"D-L:65N=$-O;FYE8W1I;VY3<&5E9#U.;W)M
?86P-"D%P<#U!=71O#0I703TQ#0I697)S:6]N/3@N,@``
`
end
sum -r/size 33634/211
[/more]

команда для сливания вот такая:
copy /a cfg1.v8i+cfg2.v8i ibases.v8i

[more=результирующий файл]
begin 644 ibases.v8i
M[[N_6T)!4T4Q70T*0V]N;F5C=#U3<G9R/2(Q.3(N,38X+C$N,2([4F5F/2)B
M87-E,2([#0I)1#TQ93=F8V%B9"TP.&1A+30R9&(M.3,X9"TU86)B.&8Q,S8Q
M9C,-"D]R9&5R26Y,:7-T/3$V-C0P#0I&;VQD97(]+PT*3W)D97));E1R964]
M,38V-#`-"D5X=&5R;F%L/3`-"D-L:65N=$-O;FYE8W1I;VY3<&5E9#U.;W)M
M86P-"D%P<#U!=71O#0I703TQ#0I697)S:6]N/3@N,N^[OUM"05-%,5T-"D-O
M;FYE8W0]4W)V<CTB,3DR+C$V."XQ+C$B.U)E9CTB8F%S93(B.PT*240]-#=D
M,6)A-S@M86-F92TT-V$W+6$U,V4M-S,S93!E-#(V,V%F#0I/<F1E<DEN3&ES
M=#TQ-C@Y-@T*1F]L9&5R/2\-"D]R9&5R26Y4<F5E/3,S,#(T#0I%>'1E<FYA
M;#TP#0I#;&EE;G1#;VYN96-T:6]N4W!E960]3F]R;6%L#0I!<'`]075T;PT*
25T$],0T*5F5R<VEO;CTX+C(:
`
end
sum -r/size 56411/423
[/more]

Добавлено:
причём, в команде сливания что ключ /a, что ключ /b - всё одинаково, вставляется этот символ.
Автор: NIKZZZZ
Дата сообщения: 29.09.2010 11:06
Accessor

Цитата:
Увы, в исходных файлах этого символа нет.

А если посмотреть в HEX виде?
Cору /a нормально сливает UNI файлы, "яю" между ними не вставляет.
Если в исходных файлах нет этих символов, может их просто добавить?




Добавлено:
Accessor
Так кодировочка UTF8 !!!
Автор: res2001
Дата сообщения: 29.09.2010 11:14
Accessor
В бинарном режиме копирования, copy не делает ни каких предположений о содержимом файлов и сливает все как есть побайтно. Значит эти символы есть в исходных файлах.
Посомотри в HEX виде, как посоветовал NIKZZZZ.
Автор: Beeboba
Дата сообщения: 29.09.2010 11:18

Цитата:
smirnvlad


создаю тысячу файлов "%номер%.zip" и батник с кодом выше маску меняю на *.zip, загружаю дисковую систему запросами, запускаю батник и вижу файл "2010_09_28_23_43_2010_09_28_23_43_10.zip" т.е. переименованный файл переименовывался ещё раз
чтобы такое избежать

Код: for /f "tokens=*" %%a in ('dir /b *.zip') do ren "%%a" "%date:~6,4%_%date:~3,2%_%date:~0,2%_%time:~0,2%_%time:~3,2%_%%a"


Спасибо !!! но у меня сразу после переименование , файлы перемещаются в другую папку я так решил т.к с коммандной строкой не сильно дружу


А вообще вся байда была придумана для резервного копирования в реалтайме при работе в программе (Х)- прога глюченная но необходимая таким образои мой .cmd срабатывает каждые 20 минут в тихом режиме и проэкты бекапятся куда надо ,, если прога зависла и проэкт запорот можно всегда откатиться - теперь нужно научиться пользоваться ctrl-s
Автор: res2001
Дата сообщения: 29.09.2010 11:19
И еще, BOM добавляется в начало документа, а не в конец и тем более не в середину.
Автор: NIKZZZZ
Дата сообщения: 29.09.2010 11:25
Accessor

EF BB BF - эти три байта в начале файла, при слиянии их нужно просто проигнорировать в первой строке второго файла, UTF8 Windows понимает плохо.
Автор: Accessor
Дата сообщения: 29.09.2010 11:58
res2001
NIKZZZZ
Спасибо за помощь, всё получилось. Удалил hex-редактором эту нудную комбинацию EF BB BF. Проблема заключалась в том, что я работал FARом. Он, почему-то, не показывал мне эти лишние байты. Как только взял в руки Hiew - сразу увидел мусор в исходных файлах.
Автор: res2001
Дата сообщения: 29.09.2010 12:03
Accessor
В фаре поменял бы кодировку с УТФ на любую другую и байты бы вылезли.
Любой текстовый редактор, понимающий УТФ8, не показывает БОМ.
Автор: wolf0425
Дата сообщения: 29.09.2010 13:18

Цитата:
В фаре поменял бы кодировку с УТФ на любую другую и байты бы вылезли.
не, просто от переключения - не вылезли бы.
вылезли бы если из редактирования файла выйти с установленной анси/оем кодировкой и снова зайти.
И не записались бы в в файл при сохранении в 1251/866


Добавлено:

Цитата:
настраивается оболочка PowerShell в режиме реального времени, включая и заголовок окна, но, как я понимаю, приведённые действия справедливы для окна любой программы.
оболочка там настраивается наверно же из самой оболочки? что процесс может поменять имя своего окна - это понятно, вопрос можно ли поменять имя окна совершено левого уже запущенного процесса?
Автор: Batnik
Дата сообщения: 29.09.2010 17:23
Нужно сравнить текущую дату с датой файла из папки и если они различаются на 3 месяца удалить файл.
Автор: bomzzz
Дата сообщения: 29.09.2010 17:31
Batnik кусок уже накалякал - если конечно нет способа проще

Цитата:

ECHO OFF
COLOR 9F
CLS
setlocal enabledelayedexpansion
echo %DATE%
set MYDATE=%DATE%
set /A CURDAY=1%MYDATE:~0,2%-100
set /A CURMOUNTH=1%MYDATE:~3,2%-100
set /A CURYEAR=1!%MYDATE:~6,4%-10000
echo %CURYEAR% %CURMOUNTH% %CURDAY%


SET DIRCMD=/B /A:-D
PUSHD
for /f "delims=" %%I in ('DIR') do (
echo %%~tI
SET FILEDATA=%%~tI
echo !FILEDATA!
set /A DAY=1!FILEDATA:~0,2!-100
set /A MOUNTH=1!FILEDATA:~3,2!-100
set /A YEAR=1!FILEDATA:~6,4!-10000
echo !YEAR! !MOUNTH! !DAY!

)
ECHO.
POPD
pause


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


set /A CHANGE=%CURYEAR%-!YEAR!
if !CHANGE! NEQ 0 set /A MOUNTH=!CHANGE!*12+!MOUNTH!
Автор: Batnik
Дата сообщения: 29.09.2010 17:47

Цитата:
осталось алгоритм сравнения придумать и реализовать.


А может просто сделать типо так If Текущая дата - Дата создания файла > 300 then удалить файл

Автор: bomzzz
Дата сообщения: 29.09.2010 17:48
Batnik
нет так не получится, батники умеют десятичные файлы считать но не умеют время и дату складывать и отнимать

Добавлено:
а вот перевести все в число дней от определенной даты обычно 1 января 1980 года - идея здравая

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

Добавлено:
ааааааааааааа еще надо высокосные годы учитывать

Добавлено:
ну ета не так то уж и сложно поделить на 4 количесвто лет и целую часть прибавить к дням

Добавлено:
в досе как то можно дату получить от 1 января 1980 года сразу
Автор: 01MDM
Дата сообщения: 29.09.2010 18:03
Batnik
Используй forfiles.exе, в семерке, и может быть и в висте, из коробки.

Код:
forfiles /p "c:\path\to\folder" /d -90 /m *.* /c "cmd /c if @isdir==FALSE del /a /f @file"
Автор: bomzzz
Дата сообщения: 29.09.2010 18:23
а если из семерки выкалупать этот форфайлс он на хп будет работать? а если сетвер использовать?

Добавлено:
ну я как обычно сделал - в большой сетке на 100 человек 1-2 расшаривают диск С. в п2п нашел этот FORFILES он под ХП категорично не запускается (если конечно это он был) - пишет не приложение win32
Автор: wolf0425
Дата сообщения: 29.09.2010 18:56

Цитата:
он под ХП категорично не запускается (если конечно это он был) - пишет не приложение win32

так ты запросто мог 64-битную версию найти
а вообще взятый с win2003 forfiles под XP - работал
Автор: bomzzz
Дата сообщения: 29.09.2010 18:59
ну я не знаю что я скачал, три файла нашел 50 кб, 42 и 42.5
Автор: wolf0425
Дата сообщения: 29.09.2010 21:06
у меня в 32-битной семерке - 43008
а в утилитах, неизвестного происхождения v1.1 - 12к
Автор: 01MDM
Дата сообщения: 29.09.2010 21:38
В 7 x64
в system32 - 50712
в syswow64 - 43008
Автор: Mark_Titov
Дата сообщения: 29.09.2010 22:36
Ребят, помогите решить такую задачку, есть прогресс-бар, нужно связать его с 10 командами по мере продвижения самого прогресс-бара.
Сам не смогу, прошу у вас помощи.
Вот сам прогресс-бар -

Код: @ECHO OFF
Set N_Col=54
Set cntA=100
Set cnt=0
for /l %%i in (0,2,98) do (
dd bs=%$z%c >nul 2>&1
ping -n 1 127.0.0.1 >nul
Call :Bar
)
pause >nul& exit

:Bar
If %cnt%==0 (
For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0!
)
Set /a Inc=((%cnt%+2)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA%
If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X= Ы
Set /a cnt+=2
Set /a prsnt=cnt*100/cntA
Title %1 %prsnt%%% Loaded
Автор: res2001
Дата сообщения: 30.09.2010 07:58
Mark_Titov
Как-то так будет:

Код: @ECHO OFF
Set N_Col=5
Set cntA=10
Set cnt=0
for %%i in (test.txt test2.txt test3.txt ......) do (
if not exist %%i goto:eof
ping -n 2 127.0.0.1 >nul
Call :Bar
)
pause >nul& exit

:Bar
Set /a Inc=((%cnt%+2)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA%
If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X= Ы
Set /a cnt+=2
Set /a prsnt=cnt*100/cntA/2
Title %1 %prsnt%%% Loaded
exit /b
Автор: bomzzz
Дата сообщения: 30.09.2010 08:26
или cls каждый раз делать или
<nul set /p strTemp=Весь этот текст
<nul set /p strTemp=будет находиться
<nul set /p strTemp=на одной строке.
Автор: res2001
Дата сообщения: 30.09.2010 08:43
Упростил прогресс-бар:

Код: @ECHO OFF
Set cntA=10
for /l %%i in (1,1,%cntA%) do (
ping -n 1 127.0.0.1 >nul
Call :Bar %%i
)
pause >nul & exit

:Bar
<nul Set /p X= °
Set /a prsnt=%1*100/cntA
Title %prsnt%%% Loaded
exit /b
Автор: bomzzz
Дата сообщения: 30.09.2010 09:03
прикольно
Автор: Mark_Titov
Дата сообщения: 30.09.2010 09:21
res2001, спасибо тебе, а можно еще вариант в место (test.txt test2.txt test3.txt ......) вставить goto :1, goto :2, goto :3, и т.д до goto :10.
Что бы по ходу выполнения прогресс бара выполнялись разные по значению действия, например goto :1 - проверка наличия файла, goto :2 - пинг, goto :3 - отправка почты блатом и т.д до goto :10. И что бы так же сохранялась градация прогресс-бара..?
Только мне нужен прогресс бар для вот этих размеров - mode con lines=50 cols=110
Автор: Koolyan
Дата сообщения: 30.09.2010 09:31
bomzzz
а шде можно такое взять??
Автор: bomzzz
Дата сообщения: 30.09.2010 09:33
тута http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=740#12
Автор: 01MDM
Дата сообщения: 30.09.2010 09:43
Mark_Titov
Можно так:

Код:
@echo off
setlocal

0>nul set /p="GO ["
for /l %%i in (0,1,9) do call:%%i && 0>nul set /p="#"
echo ] DONE
goto:eof

:0
1>nul ping -n 2 localhost
goto:eof

:1
1>nul ping -n 2 localhost
goto:eof

:2
1>nul ping -n 4 localhost
goto:eof

:3
1>nul ping -n 2 localhost
goto:eof

:4
1>nul ping -n 1 localhost
goto:eof

:5
1>nul ping -n 3 localhost
goto:eof

:6
1>nul ping -n 3 localhost
goto:eof

:7
1>nul ping -n 1 localhost
goto:eof

:8
1>nul ping -n 2 localhost
goto:eof

:9
1>nul ping -n 1 localhost

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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