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

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

Автор: mugil_cephalus
Дата сообщения: 05.04.2010 21:33
K1ska

Цитата:
2. Написать пакетный файл выводящий на экран содержимое 3 текстовых файлов, указанных в качестве параметра и объединяющий их в один.

запуск - filename.bat "c:\folder\1.txt" "d:\folder\2.txt" "x:\folder\3.txt"

filename.bat :

Код: rem @echo off
cd\
chcp 1251>nul
type "%~1"
type "%~2"
type "%~3"
copy /-y "%~1" + "%~2" + "%~3" "c:\folder\result.txt"
chcp 866>nul
pause
Автор: METAJIJI
Дата сообщения: 06.04.2010 08:02
Такая задачка, как изменить шрифт средствами bat? Мне нужно в консоли вывести utf8 кодировку...
Пишу команду:

Код: chcp 65001
Автор: METAJIJI
Дата сообщения: 06.04.2010 09:11

Код:
:main
@CLS
::{ Рисуем меню
ECHO.Пункт меню 1
ECHO.Пункт меню 2
ECHO.Пункт меню 3 (Выйти)
ECHO.Пункт меню звездочка [* ]
::{ Рисуем меню

::{ ждем ввода с клавиатуры
SET mainprompt=x && SET /p mainprompt= Выберите пункт меню:
::} ждем ввода с клавиатуры

::{ Проверяем что ввел пользователь
IF /i %mainprompt%==Значение_1 GOTO :point
IF /i %mainprompt%==Значение_2 CALL
IF /i %mainprompt%==Значение_3 EXIT
IF /i %mainprompt%==* GOTO :STAR
::} Проверяем что ввел пользователь
GOTO main

::{Пример с точкой в батнике
:point
ECHO.Выбрана 1 опция
PAUSE
GOTO :main
::}Пример с точкой в батнике

::{выбор по звездочке
:STAR
ECHO.Вы Ввели звездочку
PAUSE
GOTO :main
::}

Автор: METAJIJI
Дата сообщения: 06.04.2010 09:19
В смысле перемещением символа? О_о
Автор: king_stiven
Дата сообщения: 06.04.2010 10:05
ivn1978
то есть имеется:

Команда 1 [. ]
Команда 2 [ ]
Команда 3 [ ]
Команда 4 [ ]

нажимем клавишу "стрелка вниз", имеем на экране:

Команда 1 [ ]
Команда 2 [. ]
Команда 3 [ ]
Команда 4 [ ]

?
Автор: METAJIJI
Дата сообщения: 06.04.2010 10:25
ну... реализуйте

Код:
SET mainprompt=Нажатая_стрелка_вниз
Автор: wolf0425
Дата сообщения: 06.04.2010 12:25

Цитата:
Очень хочется видеть в консоли Lucida Console Но лишь на 1 сессию, чтобы настройки консоли которые были не сбились...
а чем плохо иметь Lucida Console на все сессии?
Автор: METAJIJI
Дата сообщения: 06.04.2010 14:42
wolf0425:
ну неудобно, ибо точечные шрифты используются в другом месте :) с Lucida Console конечно хорошо, но выглядит немного иначе... Как я понял кроме редактирования реестра путей решения больше нет?

ivn1978:
в принципе можно сделать проверку, равно ли введенное значение хотябы одному из значений.... если не равно, то выдать ошибку...
Автор: gryu
Дата сообщения: 06.04.2010 15:00
METAJIJI

Цитата:
Очень хочется видеть в консоли Lucida Console Но лишь на 1 сессию, чтобы настройки консоли которые были не сбились...

Есть следующее решение.
Цитата:
@echo off
REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Lucida Console" /f
REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontSize /t REG_DWORD /d 000c0000 /f
REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontFamily /t REG_DWORD /d 00000036 /f
REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontWeight /t REG_DWORD /d 00000190 /f
REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontSize /t REG_SZ /d "Lucida Console" /f
REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v HistoryNoDup /t REG_SZ /d 00000000 /f

Это включение Lucida Console в реестре.
Так же можно вернуть потом назад.
Либо reg файлом.
Кстати при дефолтных настройках винды параметра HKCU\Console\%%SystemRoot%%_System32_cmd.exe не сушествует.
Он появляется если настраивали консоль "под себя".
Т.е. по сути можно только так
Цитата:
REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Lucida Console" /f
трала ла
REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Terminal" /f
или
Цитата:
трала ла
REG ADD HKCU\Console /v FaceName /t REG_SZ /d "" /f
REG delete HKCU\Console\%%SystemRoot%%_System32_cmd.exe /f
что по дефолту.

Это прямое указание на шрифт в консоли.
Цитата:
Как я понял кроме редактирования реестра путей решения больше нет?
я тоже искал, не нашёл.
Автор: Maikl_relax
Дата сообщения: 06.04.2010 15:04
Всем привет!
Подскажите, как пакетно удалить все файлы с именем file.txt из всех папок и подпапок в "F:\NAME" кроме тех, что лежат в "F:\NAME\NODELETE"
Либо адаптировать скриптик, котрый мне любезно подсказывали для поиска и удаления папок:

for /f "delims=" %%a in (' dir /b/s/a:d "F:\NAME\*NEW_STRU" ') do (if "%%~nxa"=="NEW_STRU" (rd /S /Q "%%~fa"))

Для файлов трюк не прошел (у меня дурака ))

for /f "delims=" %%a in (' dir /b/s/a:d "F:\NAME\*" ') do (if "%%~nxa"=="file.txt" (del /F "%%~fa"\file.txt))

И как быть с "F:\NAME\NODELETE" - оттуда ведь удалит тоже, а не надо (((
?
Автор: king_stiven
Дата сообщения: 06.04.2010 16:28
gryu

Цитата:
Т.е. операция должна проводится только над файлами с датой создания не старше 5 минут



Код: @echo off
echo WScript.Quit (DateDiff("n", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments.Item(0)).DateCreated, Now))>"%temp%\timediff.vbs"

for %%a in (*.*) do (
set "fgh=%%a"
call :compare_crdate
)
del "%temp%\timediff.vbs"
goto :eof

:compare_crdate
cscript //nologo "%temp%\timediff.vbs" "%fgh%"
if %errorlevel% LEQ 5 echo %fgh% created 5 min
Автор: gryu
Дата сообщения: 06.04.2010 16:50
king_stiven
спасибо. ещёб понять где эти 5 минут прописываются что бы их самому менять.
Потому как мне не одну схожую задачу решить нужно. С разным временем.
Автор: king_stiven
Дата сообщения: 06.04.2010 16:59
gryu

Цитата:
if(если) %errorlevel%(время создания файла %fgh%) LEQ(меньше\равно) 5 echo %fgh% created 5 min
Автор: Dimau1981
Дата сообщения: 06.04.2010 17:05
Подскажите плиз. На ***creator.elitecom.ru встретился такой батник, называемый там "шуточный".

Set FromDir=%CD%
Set SvcDir=%FromDir%
Set TargetDir=%SvcDir%\Update
MD %TargetDir%

А в чем прикол-то? В песочнице запустил, так только создалась папка Update. Объясните плиз...
Автор: wolf0425
Дата сообщения: 06.04.2010 17:09
METAJIJI

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


Цитата:
с Lucida Console конечно хорошо, но выглядит немного иначе...
замечательно выглядит - можно батники и в 866 и в 1251 гонять, всё рисуется без кракозябр.
а что размеры и пропорции другие - так для текста это должно быть пофиг.

Автор: gryu
Дата сообщения: 06.04.2010 17:12
king_stiven
Спасибо. А если БОЛЬШЕ? (это про параметр LEQ)

Dimau1981
или он не полный или весь прикол в создании папки Update в той папке откуда запускается батник.
MD %TargetDir%
где TargetDir - сложновыраженная переменная путь+имя папки.
Set FromDir=%CD% - опредиление местанахождения и создание переменной на основе сиих данных.
Set SvcDir=%FromDir% - создание ещё одной переменной. (она уже есть)
Set TargetDir=%SvcDir%\Update - подстановка этой переменной/пути под создание папки update
MD %TargetDir% - само создание....
... или я тоже ничё не понял....
нахрена так сложно? через cd ?
Всё тоже самое получаем командой
md .\update
или
md update

Добавлено:
wolf0425

Цитата:
замечательно выглядит - можно батники и в 866 и в 1251 гонять, всё рисуется без кракозябр.

Это если запускается.
К сожалению нарвался на ряд грабель.
1. Если в пути есть символ "!" не сработает.
2. не понял почему, но на некоторых машинах консоль цтиклится на команде chcp с любыми параметрами.
Автор: king_stiven
Дата сообщения: 06.04.2010 17:18
gryu
набери в комстроке if /?
Автор: gryu
Дата сообщения: 06.04.2010 17:23
king_stiven
йа дудак.
Спасибо.
Автор: wolf0425
Дата сообщения: 06.04.2010 17:57
gryu
Цитата:
Это если запускается.
запускается/не запускается - от настройки фонта не зависит никак.

Цитата:
1. Если в пути есть символ "!" не сработает.
можно пример в студию? А то у меня всё замечательно срабатывает.

Цитата:
2. не понял почему, но на некоторых машинах консоль цтиклится на команде chcp с любыми параметрами.
что есть циклится? что там говорит консоль, если chcp 437 набрать тупо вручную в окне cmd?



Автор: anzibal
Дата сообщения: 06.04.2010 19:12

Цитата:
chcp 1251>nul
for /f "tokens=1-3* skip=5 delims= " %%a in ('dir /a-d/o-d/tc %systemroot%\Tasks') do set "var=%%~d" &&goto:exit
:exit
if /i "_%var:~-4%" equ "_.job" del /a: /q "%systemroot%\Tasks\%var%"
pause


А тут без разницы получается сколько заданий в списке?
Если установить 8 заданий, то удаляеться 7, 6, затем 8...
Если 5 заданий, удаляет 3 задание.
Как решить проблему?
Автор: mugil_cephalus
Дата сообщения: 06.04.2010 21:32
anzibal
у меня вот этот код выдает в переменную предпоследнее задание по дате создания

Цитата:
chcp 1251>nul
for /f "tokens=1-4* skip=6 delims= " %%a in ('dir /a-d/o-d/tc %systemroot%\Tasks') do set "var=%%~e" &&goto:exit
:exit
pause

tokens - зависит от формата отображения времени и даты (у тебя - tokens=1-3* и set "var=%%~d" )
skip - зависит от вывода команды - dir /a-d/o-d/tc %systemroot%\Tasks (у себя я skip подобрал вручную - ввел команду dir /a-d/o-d/tc %systemroot%\Tasks и посмотрел с каким skip'om выхожу на предпоследнее задание)
наверное, ты зря поменял skip с 6 на 5 (что пишет dir , если нет метки тома - не знаю)
у меня так:
F:\>dir /a-d/o-d/tc %systemroot%\Tasks
Том в устройстве F имеет метку win1
Серийный номер тома: BE1C-92F1

Содержимое папки F:\WINDOWS\Tasks

введи в консоли dir /a-d/o-d/tc %systemroot%\Tasks - посмотри какое задание второе сверху (это - предпоследнее) и подбери skip=x , чтобы код выдавал в переменную это задание

Цитата:
А тут без разницы получается сколько заданий в списке?

хоть 1000 заданий; код находит предпоследнее, присваивает его переменной %var% , выходит из цикла for и далее можешь делать что хочешь с этой переменной - удалять или, например, показывать - if /i "_%var:~-4%" equ "_.job" echo.%var%
Автор: gryu
Дата сообщения: 06.04.2010 21:48
wolf0425
Цитата:
можно пример в студию? А то у меня всё замечательно срабатывает.

Цитата:
что есть циклится? что там говорит консоль, если chcp 437 набрать тупо вручную в окне cmd?

Я так и не разобрался в чём дело. Где ошибка.

Вот сам батник
Цитата:
rem @echo off
chcp 1251
set A=Ау!
rem chcp 866
echo %A%


Добавлено:

Цитата:
что там говорит консоль, если chcp 437 набрать тупо вручную в окне cmd?
работает. Почему то именно в составе bat|cmd файе не работает.
Автор: anzibal
Дата сообщения: 06.04.2010 22:04
mugil_cephalus
Исправил пост

C:\Documents and Settings\Admin>dir /a-d/o-d/tc %systemroot%\Tasks
Том в устройстве C не имеет метки.
Серийный номер тома: 3046-D42B

Содержимое папки C:\WINDOWS\Tasks

06.04.2010 22:56 154 5.job
06.04.2010 22:55 154 4.job
06.04.2010 22:54 154 3.job
06.04.2010 22:53 154 2.job
06.04.2010 22:49 154 1.job
29.03.2010 21:43 6 SA.DAT
29.03.2010 21:31 65 desktop.ini
7 файлов 841 байт
0 папок 30 737 281 024 байт свободно

C:\Documents and Settings\Admin>
Автор: mugil_cephalus
Дата сообщения: 06.04.2010 22:07
gryu

Цитата:
Вот сам батник

setlocal enabledelayedexpansion - включено?

вот сравни два батника
setlocal enabledelayedexpansion
cd ".\z!z"
echo.hi!hi
pause

и

REM setlocal enabledelayedexpansion
cd ".\z!z"
echo.hi!hi
pause
Автор: gryu
Дата сообщения: 06.04.2010 22:10
mugil_cephalus
Гм. "монопенесуально"....
я именно

setlocal enabledelayedexpansion / rem setlocal enabledelayedexpansion
cd ".\z!z"
echo.hi!hi
pause

проверял.

Добавлено:
Если вписать в предидущий батник, то появляется "новая строка ругани"
А именно
Достигнут уровень рекурсии, максимально возможный для команды setlocal
Автор: mugil_cephalus
Дата сообщения: 06.04.2010 22:25
anzibal
вот код настроенный для тебя
chcp 1251>nul
for /f "tokens=1-3* skip=6 delims= " %%a in ('dir /a-d/o-d/tc %systemroot%\Tasks') do set "var=%%~d" &&goto:exit
:exit
if /i "_%var:~-4%" equ "_.job" del /a: /q "%systemroot%\Tasks\%var%"
pause

в этом коде ничего исправлять не нужно!


Цитата:
skip получается равен 6.

верно

Цитата:
tokens=1-4* то есть остаток 5 будет занесён в переменную.
if /i "_%var:~-5%"

не верно

у тебя *.job - это четвертое поле после третьего пробела (delims'a)
tokens=1-3* - это просмотр 4-ех лексем, первая=%%a вторая=%%b третья=%%с четвертая (звездочка * ) = %%d - вот: set "var=%%~d"
"_%var:~-4%" - это от перменной %var% (бывшей 4-ой %%d ) отрезаем 4 последних символа
Автор: anzibal
Дата сообщения: 06.04.2010 22:57
mugil_cephalus

Все равно понять не могу как он определяет предпоследнее

Возможно так:
C:\Documents and Settings\Admin>dir /a-d/o-d/tc %systemroot%\Tasks эта строчка не учитывается
Том в устройстве C не имеет метки. 1
Серийный номер тома: 3046-D42B 2
3
Содержимое папки C:\WINDOWS\Tasks 4
5
06.04.2010 22:56 154 5.job 6
06.04.2010 22:55 154 4.job и с этой уже работает.
это число строк как раз и указывается в скипе...насколько я сейчас понимаю.
Автор: Elroir
Дата сообщения: 07.04.2010 01:45
gryu
А батник твой, случайно, не называется "chcp.bat" или "chcp.cmd"?
Автор: gryu
Дата сообщения: 07.04.2010 10:15
Elroir
гм. тот который тестовый называется.
Но тот который рабочий, нет.
Кстати об имени батника я не подумал...
Автор: wolf0425
Дата сообщения: 07.04.2010 10:22
gryu наводящий вопрос: ты батник запускаешь из консоли cmd или из ФАРа?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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