Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: ZolotnikOV
Дата сообщения: 02.10.2009 11:23
видел где то было как выводить окошко с сообщение.ща не могу найти.


А вообще нужен код что бы проверял пустая ли папка и если пустая, то выводил сообщение.

если не сложно помогите.
спасибо.
Автор: 01MDM
Дата сообщения: 02.10.2009 11:39
ZolotnikOV

Код:
dir /b /a "SomeFolder" | 1>nul findstr "." || msg %username% empty
Автор: ZolotnikOV
Дата сообщения: 02.10.2009 16:02
01MDM
Спасибо большое!!
А почему если русскими писать показывает кракозябры?
Автор: 01MDM
Дата сообщения: 02.10.2009 16:13
ZolotnikOV
Запускаешь из батника? Пропиши в верху "chcp 1251 1>nul".

Код:
@echo off
chcp 1251 1>nul
msg %username% ТЕСТ
Автор: vovanius1
Дата сообщения: 02.10.2009 16:14
Я запутался

Команда netsh interface ip show dns "Internet"

выдает:

Configuration for interface "Internet"
Statically Configured DNS Servers: ххх.ххх.ххх.ххх
ууу.ууу.ууу.ууу
Register with which suffix: None


Если сделать

for /f "skip=2 tokens=5" %%i in ('netsh interface ip show dns "Internet"') do set primary=%%i

получим

set primary=ххх.ххх.ххх.ххх

и сразу

set primary=None

т.е. все логично, но как указать, что мне не нужно обрабатывать строку

Register with which suffix: None

а только

Statically Configured DNS Servers: ххх.ххх.ххх.ххх

Помогите, пжалста...
Автор: 01MDM
Дата сообщения: 02.10.2009 17:01
vovanius1
Попробуй, я не проверял

Код:
@echo off
for /f "tokens=*" %%i in ('netsh interface ip show dns "Internet" ^| findstr "[0-9]\.[0-9]"') do call:set %%i
echo %primary%
echo %secondary%
goto:eof

:set
if not "%2"=="" (set "primary=%2") else (set "secondary=%1")
Автор: TruLander100
Дата сообщения: 02.10.2009 18:03
Всем добрый день. Прошу мне помочь с простенькой задачкой)) :
мне нужно переименовать файлы до определенного вида, затем с этих переименованных файлов считать 3 строчку и сохранить ее в файл с таким же названием что и исходый файл, но в другой директории.

как я себе представляю все эти манипуляции (мне не важно чтоб батник выполнялся в 1 файле можно все поэтапно)
1)все файлы имеют имена отличающиеся только цифрами рабочий пример: cml.cgi-num=1.htm нужно оставить от названия только цифру 1,
cml.cgi-num=243.htm оставить 234 и так далее.

2) опять переименовывать все эти уже переименованные файлы, но к их названию нужно прибавить число пример 34543
чтоб файл который назывался 1 к его названию прибавилось число 34543 в итоге мы видем файл 34544,
точно также ко всем остальным 243 прибавляем к названию 34543 получаем 34786 и так далее.

3) опять переименовать эти же переименованные дважды файлы, но уже нужно приплюсовывать к названию рандомное число от 1 до 1000 и приплюсовать число 500 как константу которая увеличивается с каждым новым файлом на 500, то есть с каждым новым переименнованным файлом эта константа увеличивалась на 500.
Пример мы имеем файлы названием 34544, генерируем любое число от 1 до 1000 и приплюсовываем к названию, пусть с генерировалось 628 прибавляем к 34544 получаем
35172, далее прибавляем число 500 и запоминаем что оно увеличилось на 500 то есть в следующий раз оно будет 1000 получаем число 35672 и так ко всем файлам.
далее берем следующее число по порядку и проделываем тоже самое и увеличиваем константу опять на 500 и запоминает к следующему файлу то есть будет 1500.

4) все переименовывать больше ничего не нада))), теперь нужно считать из каждого файла 3 строчку и занести ее в файл с аналогичным названием исходного файла, но в другой директории к примеру 1. Все. думаю это не так уж и сложно но у мну мозга и знаний не хватает сделать это самому)). Спасибо тем кто поможет.
Автор: 22247
Дата сообщения: 02.10.2009 21:53
Разобрался! Извеняюсь что тупил...

вот, может кому пригодитса:

rar a -ag_DDMM -dh -m5 pac.000 *.xls

Получаетса архив pac_0210.000 с нужными (напимер *.xls) файлами.
Автор: xdru
Дата сообщения: 03.10.2009 16:17
Понадобилось заархивировать в .zip архив каждый файл отдельно из папки с каталогами (текстовая библиотека).
Т.е. имея например 3 файла 1.txt, 2.txt, 3.txt на выходе надо получить 1.txt.zip, 2.txt.zip, 3.txt.zip.

Консольный winrar не умеет работать с zip, пробовал info zip - мало функциональности, не разобрался как сделать..
Помогите пожалуйста!
Автор: 01MDM
Дата сообщения: 03.10.2009 16:35
xdru
Наверное 7zip оптимальный выбор. Имхо.

Код:
C:\Test> for %i in (*.txt) do 7za a -tzip "%i.zip" "%i"
Автор: xdru
Дата сообщения: 03.10.2009 19:22

Цитата:
xdru
Наверное 7zip оптимальный выбор. Имхо.

Код:


Код: C:\Test> for %i in (*.txt) do 7za a -tzip "%i.zip" "%i"

Автор: bomzzz
Дата сообщения: 03.10.2009 19:32
скорее всего нада по одному процентику добавь перед каждым процентиком
for %%i in (D:\test\*.txt) do 7za a -tzip "%%i.zip" "%%i"
а вот в конце не знаю - пробовать нада. ну такого типа
Автор: vovanius1
Дата сообщения: 03.10.2009 19:45

Цитата:
Configuration for interface "Internet"
Statically Configured DNS Servers: ххх.ххх.ххх.ххх
ууу.ууу.ууу.ууу
Register with which suffix: None


вот как бы оттуда выкусить адреса и присвоить их переменным?


Проблема решена. Может, кому пригодится:

@echo off
call :get_dns_servers
echo %primary_dns%
echo %secondary_dns%
pause
exit

:get_dns_servers
for /f "skip=2 tokens=5" %%i in ('netsh interface ip show dns "Internet"') do set primary_dns=%%i & goto get_secondary
:get_secondary
for /f "skip=3 tokens=1" %%i in ('netsh interface ip show dns "Internet"') do set secondary_dns=%%i & goto :eof
Автор: xdru
Дата сообщения: 03.10.2009 19:51

Цитата:
скорее всего нада по одному процентику добавь перед каждым процентиком
for %%i in (D:\test\*.txt) do 7za a -tzip "%%i.zip" "%%i"
а вот в конце не знаю - пробовать нада. ну такого типа

да, теперь заработало, спасибо 01MDM, bomzzz!
интересно, с чем это связано (я про проценты).
И еще вопрос, как можно изменить код, чтобы он и в подпапках работал?
Автор: 01MDM
Дата сообщения: 03.10.2009 19:59
xdru

Цитата:
интересно, с чем это связано (я про проценты).

Такой синтаксис.

Цитата:
И еще вопрос, как можно изменить код, чтобы он и в подпапках работал?


Код:
@echo off
for /f "tokens=*" %%i in ('dir /b /s "D:\test\*.txt"') do 7za a -tzip "%%i.zip" "%%i"
Автор: bomzzz
Дата сообщения: 03.10.2009 20:02
ну это в документации есть, в хелпе к винде. связано с экранированием символов наверно - я сам все понять не могу, поэтому путаюсь и всегда эти процентики опытным путем расставляю.
Автор: xdru
Дата сообщения: 03.10.2009 20:20
Все ясно, спасибо за помощь
Автор: vitrzn
Дата сообщения: 04.10.2009 16:12
01MDM
Может тогда и мне поможете ?
нужно этот код:

Цитата:
@echo off
for /f "tokens=*" %%i in ('dir /b /s "D:\test\*.txt"') do 7za a -tzip "%%i.zip" "%%i"


подправить так чтобы архивировались все файлы внутри папки с присвоением архиву имя папки
т.е. было .\1\ 2.txt 3.txt
а стало .\1\1.zip

было бы идеально если после архивирования и удалялись архивируемые файлы
(тип/расширение файлов одно *.txt)
Автор: ZDik
Дата сообщения: 05.10.2009 12:48

Цитата:
@echo off
setlocal

for /f "tokens=*" %%i in (list.txt) do call:check "%%i"
goto:eof

:check
set /a cnt+=1
if exist z:\%1 (
for /f "tokens=*" %%i in ('dir /b /s /a z:\%1') do (
if %%~zi gtr 0 set "isEmpty=-" && goto:md
)
)

:md
md "%cnt%_%~1%isEmpty%"
set "isEmpty="

как сделать нумерацию в начале имени каталога двух цифренной (01-02--99)
Автор: crotoff
Дата сообщения: 05.10.2009 13:13
Господа, подскажите как настроить систему чтобы при запуске консольных приложений из другой программы на них не передавался фокус... реально напрягает
Автор: 01MDM
Дата сообщения: 05.10.2009 13:21
ZDik

Цитата:
как сделать нумерацию в начале имени каталога двух цифренной (01-02--99)


Код:
....

:md
set "num=0%cnt%"
md "%num:~-2%_%~1%isEmpty%"
set "isEmpty="
Автор: XXXXL
Дата сообщения: 05.10.2009 13:23
Здравствуйте ребята!
Помогите решить сложную для меня задачу.
В директории "C:\Resource\img" подкаталогов с различной графикой, нужно со всех подкаталогов скопировать файлы расширения ".gif" в папку "C:\Resource\img\GIF" и если встретятся одноименные файлы, то просто заменить.

Спасибо!
Автор: 01MDM
Дата сообщения: 05.10.2009 13:41
vitrzn

Цитата:
подправить так чтобы архивировались все файлы внутри папки с присвоением архиву имя папки

Может тогда лучше архивировать саму папку?
По вопросу, попробуй так:

Код:
@echo off
setlocal

pushd "d:\test"
for %%i in ("%cd%") do set "name=%%~nxi"

7za a -tzip "%name%.zip" .\*
del /s *.txt
popd
Автор: XXXXL
Дата сообщения: 05.10.2009 14:17
01MDM
Супер! работает.

Спасибо!


Автор: TruLander100
Дата сообщения: 05.10.2009 19:14
Народ подскажите пожалуйста как приплюсовывать к названию рандомное число от 1 до 1000 и приплюсовать число 500 как константу которая увеличивается с каждым новым переименованным файлом на 500, Очень нужно переименовать файлы они имеют цифирные названия типа 1,2,3,4....
Автор: bomzzz
Дата сообщения: 05.10.2009 19:54
%RANDOM% Системная Возвращает произвольное десятичное число от 0 до 32767. Создается командой Cmd.exe

Цитата:

ECHO OFF
COLOR 9F
CLS
ECHO %RANDOM%
pause


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

Цитата:

ECHO OFF
COLOR 9F
CLS
COPY MyFile.txt %RANDOM%.txt
pause
Автор: 01MDM
Дата сообщения: 05.10.2009 20:14
TruLander100

Цитата:
Народ подскажите пожалуйста как приплюсовывать к названию рандомное число от 1 до 1000 и приплюсовать число 500 как константу которая увеличивается с каждым новым переименованным файлом на 500, Очень нужно переименовать файлы они имеют цифирные названия типа 1,2,3,4....


Код:
@echo off
setlocal enabledelayedexpansion

::находим случайное число 1-1000

for /l %%i in (1,1,1000) do set "num_!random!=%%i"
for /f "tokens=2 delims==" %%i in ('set num_') do set "num=%%i" && goto:next

:next

:: переименовываем файлы 1.txt - n.txt

for %%i in (*.txt) do (
ren "%%i" "!num!%%~xi"
set /a num+=500
)
Автор: bomzzz
Дата сообщения: 06.10.2009 04:55
очередную прогу радил, для организации пользовательского интерфейса в бат файлах
InputBox.exe3,00 КБ (3 072 байт)

пример командной строки
InputBox.exe /MyTitle/введите|цены|на кефир/300/250
результат

/заголовок окна/текст окна, знак | - перенос строки/x-позиция окна на экране/y позиция

возвращаемое значение длина введенной строки(количество введенных символов).
введенная строка записывается в файл out.ini рядом с прогой.

если не указать положение на экране окно выведеться в левом верхнем углу. количество строк сообщения ограничено пятью, длина одной строки сообщения - 39 символов. количество введенных символов в окно ограничено 65536 символами - 64 кб, без переноса строки.

фигня маленько получилась знак | надо экранировать ^|. на какой заменить бы.

Цитата:

ECHO OFF
COLOR 9F
CLS
chcp 1251
InputBox.exe /TITLE/введите цены на кефир^| в капейка руплях/300/250
chcp 866
PAUSE

для получения второго значения удалять out.ini не обязательно, он перезапишется
Автор: TruLander100
Дата сообщения: 06.10.2009 07:47
01MDM
Спасибо выручил)). мне нужно такое специфическое название файлов для файловой cms которая хранит файлы генерируя их названия счетом секунд с 1970 года)), просто мне нужно создать видимость, что посты публикуются в разное время)) конешно в место 500 я буду подставлять колтчество секунд примерно равное 2-3 часам, а случайное число, это небольшой разброс между этими 2-3 часами.
Автор: bomzzz
Дата сообщения: 06.10.2009 11:29
утилита для запуска батника невидимым.
BatStarter.exe 1,50 КБ (1 536 байт)
параметры командной строки
BatStarter.exe /имя-путь к запускаемому батнику/параметры командной строки/вид окна
если параметр вид окна опустить, по умолчанию - окно невидимое. так же можно использовать "пасхальные яйца":

Цитата:

0 - скрытое окно.
1 - нормальное окно.
2 - минимизированное окно.
3 - максимизированное окно.
4 - запустить приложение с окном в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
5 - запустить приложение с окном в текущем состоянии.
7 - минимизированное окно. Текущее активное окно останется активным.
10 - состояние окна по умолчанию для приложения.

параметр - "параметры командной строки" тоже можно опустить. если вид окна понадобится не скрытый тогда /имя//10
возвращаемое значение - в случае удачного запуска хендл запущенного процесса

Цитата:

The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.

в случае ошибки возвращается значение ошибки - число меньше 32

Цитата:

0    The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND    The specified file was not found.
ERROR_PATH_NOT_FOUND    The specified path was not found.
ERROR_BAD_FORMAT    The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
SE_ERR_ACCESSDENIED    The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE    The filename association is incomplete or invalid.
SE_ERR_DDEBUSY    The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL    The DDE transaction failed.
SE_ERR_DDETIMEOUT    The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND    The specified dynamic-link library was not found.
SE_ERR_FNF    The specified file was not found.
SE_ERR_NOASSOC    There is no application associated with the given filename extension.
SE_ERR_OOM    There was not enough memory to complete the operation.
SE_ERR_PNF    The specified path was not found.
SE_ERR_SHARE    A sharing violation occurred.
здесь номера возможно не по порядку идут как точно я не знаю надо поискать таблицу или опытным путем
http://msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx
' ERROR_FILE_NOT_FOUND = 2&
' ERROR_PATH_NOT_FOUND = 3& - этой ошибки не получилось добиться, пишет файла нету
' ERROR_BAD_FORMAT = 11&
' SE_ERR_NOASSOC = 31
' SE_ERR_OOM = 8

примеры:
BatStarter.exe /MyBatnik.bat
BatStarter.exe /c:\MyBatnik.bat/1234567890
BatStarter.exe /MyBatnik.bat//3
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx

BatStarterU.exe 1,50 КБ (1 536 байт)
вариант где разделителем параметров командной строки используется знак ` - буква ё в английской раскладке, на тот случай если в параметре - "параметр командной строки" вдруг понадобится слеш.
BatStarter.exe `MyBatnik.bat`/Title/ввыведите|цены|на кефир/300/250`10

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: SAS.Планета (часть 2)


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