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

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

Автор: bomzzz
Дата сообщения: 22.01.2010 06:37
тебе и пересадка мозга не поможет
Автор: mitkadritka
Дата сообщения: 22.01.2010 07:21
bomzzz, просто пойди сделай хорошо своему папе. Как раз между мозгов ему заправишь, сосочка.

Вопрос актуален. Прошу людей помочь в решении.
Автор: farseer777
Дата сообщения: 22.01.2010 09:11
Подскажите, как с помощью findstr вывести определенный текст вывода какой-то команды.
Мне надо узнать сколько файлов в какой-то папке. Кол-во файлов показывает команда dir, но мне нужно знать оттуда только кол-во файлов. Т. е. из всего листинга нужно оставить только эту строку:

Код: 12 папок 969 969 328 128 байт свободно
Автор: bomzzz
Дата сообщения: 22.01.2010 09:32
farseer777

Код:
@ECHO OFF
COLOR 9F
CLS
DIR /A:D | FIND "Ї Ї®Є"
PAUSE
Автор: PARKANAF
Дата сообщения: 22.01.2010 09:34
Люди добрые а подскажите пожалуйста! Есть у меня такой батник для создания папок с названием по дате выглядит так (for /F "tokens=2* delims= " %%i in ("%DATE%") do mkdir D:\File_Input\%%i) , а сейчас нужно что бы в этой директории создавались папки с названием в таком формате "ххх 500", "ххх 501" и т.д причем эти папки уже созданы вручную до номера 801, как будет выглядеть команда для такого батника что бы он продолжил создавать ххх 802 , ххх 803 и т.д??? заранее спасибо.
Автор: bomzzz
Дата сообщения: 22.01.2010 09:45
PARKANAF

for /F "tokens=2* delims=." %%i in ("%DATE%") do mkdir "D:\File_Input\%%i"

ты наверно вот так имел ввиду - что-то твой батник у меня ничего не делает. переформулируй вопрос понятнее
Автор: PARKANAF
Дата сообщения: 22.01.2010 09:52
[q][/q]
Проще спрошу, есть директория там пользователи создавали вручную папки в таком ххх 1, ххх2, ххх3 и т.д. до 801, сейчас мне поставлена задача все это автоматизировать, вот пытаюсь написать батник который продолжит создавать, подскажите как он должен выглядеть, не силен пока я в этом
Автор: bomzzz
Дата сообщения: 22.01.2010 10:14
PARKANAF
если это кажется понятнее пожалуйста
ECHO OFF
COLOR 9F
CLS
SET /A COUNT=802
:NEWPAPKA
MKDIR XXX%COUNT%
SET /A COUNT=%COUNT%+1
GOTO NEWPAPKA
pause
за пять секунд создало у меня 3.500 папок
Автор: PARKANAF
Дата сообщения: 22.01.2010 10:26

Цитата:
bomzzz



Нет не много не то, я хочу батник засунуть в назначеные задания, что бы он запускался в нужное время по расписанию создавал следующую папку и все, и что то он у меня вместо букв квадратики на создавал
Автор: bomzzz
Дата сообщения: 22.01.2010 10:27
ты подумай - это все что ты хочешь??? умей хотя бы формулировать четко. батник простой сейчас сделаю


ECHO OFF
COLOR 9F
CLS

FOR /R "D:\File_Input" %%I IN (.) DO SET LASTPAPKA=%%I
ECHO %LASTPAPKA%
pause


погорячился - вот так получаем имя последней папки. а вот как перевести символьные данные в челочисленные я еще не делал ни разу сейчас подумаю
Автор: PARKANAF
Дата сообщения: 22.01.2010 10:35
Ок, Спасиб тебе большое!
Автор: bomzzz
Дата сообщения: 22.01.2010 10:42
ECHO OFF
COLOR 9F
CLS

FOR /R "C:\Temp" %%I IN (.) DO SET LASTPAPKA=%%I
SET LASTPAPKA=%LASTPAPKA:~0,-2%
ECHO %LASTPAPKA%
SET /A COUNT=%LASTPAPKA:~-3%
ECHO %COUNT%
SET /A COUNT=%COUNT%+1
MKDIR %LASTPAPKA%%COUNT%
pause


как делать разобрался - но вот недостаточно известно. ну то есть как отличать 001 от 1.

ну то есть как точно называются папки, и как будут продолжаться номера - будут ли когда то имена меньше 801, 100 и 10 и что будет когда доберемся до имени 999. ну и понятно что если имена разной длины то папка 88 старше папки 100
Автор: PARKANAF
Дата сообщения: 22.01.2010 10:47
спасибо, сейчас попробую
Автор: mitkadritka
Дата сообщения: 22.01.2010 10:52
Сил моих больше нет. Не хочет корректно срабатывать отключение дисплея: отключится через установленные ему десять минут и сразу снова включается. Спать мне жутко через это. Беда обычно происходит после работы просмотровщиков видео или ТВ-программы (BeholdTV у меня) в полноэкранном режиме. Может быть дрова не те, а может ещё что-то. Но я уже, и дрова менял, и все настройки, и экрана, и дров, и софта перепробовал.

Помогает одно: два раза (одного бывает мало) залезть в «Свойства экрана — Заставка — Питание» и выставить уже итак выставленное Отключение дисплея через десять минут. Вот тогда срабатывает как надо и ночью мне становится счастье в виде сна под чёрный экран и плавно закачиваемые фильмы с торрентов.

Поэтому просьба: а напишите мне пожалуйста батник, выполняющий действия по отключению дисплея через те десять минут. А уж я его тогда себе на кнопку пульта повешу, буду этак удалённо гасить монитор и вас добром вспоминать. А не напишите — шмальнусь с дула и записку оставлю.
Автор: bomzzz
Дата сообщения: 22.01.2010 10:54

ECHO OFF
COLOR 9F
CLS

FOR /R "C:\Temp" %%I IN (.) DO SET LASTPAPKA=%%I
SET LASTPAPKA=%LASTPAPKA:~0,-2%
ECHO %LASTPAPKA%
SET /A COUNT=%LASTPAPKA:~-3%
ECHO %COUNT%
SET /A COUNT=%COUNT%+1
MKDIR %LASTPAPKA:~0,-1%%COUNT%
pause

это явно не то что надо - надо знать больше об именах папок
если имена одинаковой длины и будут меняться от 801 до 999 вот так пойдет наверно, одну стрчоку заменить
MKDIR %LASTPAPKA:~0,-3%%COUNT%
Автор: PARKANAF
Дата сообщения: 22.01.2010 10:59
создает 2 отдельные папки, должно по идеи создать ЦТУ 802, а создает Отдельно папку ЦТУ и отдельно 80202, при в 2-м запуске ругается что 80202 уже сущевствует
Автор: bomzzz
Дата сообщения: 22.01.2010 11:01
вот последний вариант испытывай причем с измененной строкой. у меня для опытов папки с именами одинаковой длины и однозначными номерами.
еще одно условие появилось - кирилица в именах
Автор: farseer777
Дата сообщения: 22.01.2010 11:14
bomzzz
Спасибо, именно так. И можно узнать, как первое число записать в какую-нибудь переменную, чтобы оперировать кол-вом файлов?
Автор: PARKANAF
Дата сообщения: 22.01.2010 11:18
теперь создает 2 папки цту и 802, при повторном запуске так же ругается , что 802 уже существует
Автор: bomzzz
Дата сообщения: 22.01.2010 11:19
не понил. а понил. щас

Добавлено:
PARKANAF
как у тебя конкретно папки называются напиши, какая длина имен и как будут числа меняться
Автор: PARKANAF
Дата сообщения: 22.01.2010 11:28
цту 802 , цту 803 , цту 804 и т.д
Автор: bomzzz
Дата сообщения: 22.01.2010 11:32
farseer777
@ECHO OFF
COLOR 9F
DIR /A:D | FIND "Ї Ї®Є"
DIR /A:D | FIND "Ї Ї®Є">MYFILE.TXT
FOR /F %%I IN (MYFILE.TXT) do echo %%I
DEL MYFILE.TXT /Q
PAUSE

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

FOR /F %%I IN ('DIR /A:D | FIND "Ї Ї®Є"') do echo %%I то есть как то вот так надо делать в одну строку, но я не делал ни разу не знаю в чем ошибка

Добавлено:
PARKANAF
проблема в пробелах в именах сейчас поправлю

@ECHO OFF
COLOR 9F
FOR /R "D:\File_Input" %%I IN (.) DO SET LASTPAPKA=%%I
SET LASTPAPKA=%LASTPAPKA:~0,-2%
SET /A COUNT=%LASTPAPKA:~-3%
SET /A COUNT=%COUNT%+1
MKDIR "%LASTPAPKA:~0,-3%%COUNT%"
PAUSE

проверяй
Автор: PARKANAF
Дата сообщения: 22.01.2010 11:41
Спасибо добрый человек! Теперь все работает))
Автор: bomzzz
Дата сообщения: 22.01.2010 11:42
оно работает для папок с номерами от 100 до 999 - не самый супер батник получился

Добавлено:
гыгы - сделал. знак надо екранировать посередки

@ECHO OFF
COLOR 9F
DIR /A:D | FIND "Ї Ї®Є"
FOR /F %%I IN ('DIR /A:D ^| FIND "Ї Ї®Є"') DO ECHO %%I
PAUSE

то есть число папок в директории теперь в переменной I. только как я погляжу - считаются две лишние папки - корневая и еще какая то

понятно считается корневая папка и диск. чтоб не считались скрытые вот так DIR /A:D-H, а то они не распечатываются но считаются
Автор: rutamsystem
Дата сообщения: 24.01.2010 19:03
Помогите,

удаляет все подряд:
...
...
elete
del /q /a /f *.* 1>nul 2>&1
for /f "tokens=*" %%i in ('dir /b /ad') do rd /s /q "%%i" 1>nul 2>&1

Надо чтобы все подряд, но за исключением файлов с расширением doc, xls, txt
Что нужно изменить? чтобы эти 3 вида файлов не удалялись?
Пожалуйста.
Автор: vitrzn
Дата сообщения: 24.01.2010 20:25
rutamsystem

Цитата:
Надо чтобы все подряд, но за исключением файлов с расширением doc, xls, txt
Что нужно изменить? чтобы эти 3 вида файлов не удалялись?
Пожалуйста.


for /f "tokens=*" %%i in ('dir /b /s *.*') do move "%%i"
for /f "tokens=*" %%i in ('dir /b /a-d ^| findstr /v " список файлов которые не нужно удалять "') do del "%%i"


p.s. удаление идёт из всех вложенных папок
Автор: bomzzz
Дата сообщения: 25.01.2010 00:22
все таки лучше if использовать - в теории могут быть файлы с именами mytxt.dll
Автор: rutamsystem
Дата сообщения: 25.01.2010 03:56
vitrzn
Спасибо! проверю
но вопрос каков синтаксис перечисления файлов,
мне нужно указать только расширение файлов а имена могут быть любыми
я даже и не знакую какие ..

for /f "tokens=*" %%i in ('dir /b /s *.*') do move "%%i"
for /f "tokens=*" %%i in ('dir /b /a-d ^| findstr /v "*.doc, *.xls ,*.txt") do del "%%i"

правильно? или нет ? перечислил
"*.doc, *.xls ,*.txt"
Помогите пожалуйста




Автор: bomzzz
Дата сообщения: 25.01.2010 07:19
в этом красивом решении - ^| findstr /v выполняет поиск в выходном потоке команды DIR строк не содержащих перечисленные выражения, то есть подстановочных знаков в том смысле в котором ты их используешь не надо.

Цитата:

Поиск строк в файлах.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл]
[/C:строка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]]
строки [[диск:][путь]имя_файла[ ...]]
/V Печатает строки, не содержащие совпадений с искомыми.
Краткая сводка по синтаксису регулярных выражений:
. Любой символ.
* Повтор: ноль или более вхождений предыдущего символа или класса
^ Позиция в строке: начало строки
$ Позиция в строке: конец строки
[класс] Класс символов: любой единичный символ из множества
[^класс] Обратный класс символов: любой единичный символ из дополнения
[x-y] Диапазон: любые символы из указанного диапазона
\x Служебный символ: символьное обозначение служебного символа x
\<xyz Позиция в слове: в начале слова
xyz\> Позиция в слове: в конце слова

список выражений просто через пробел надо походу - вот так у меня работает
for /f "tokens=*" %%i in ('dir ^| findstr "bat txt"') do echo %%i

поэтому могут быть удалены не только файлы с расширениями txt, но и просто содержащие в пути это сочетание буков,
вот так попробуй for /f "tokens=*" %%i in ('dir ^| findstr "bat$ dll$"') do echo %%i
файлы help.bat и bat.txt различаются и файл bat ggg.txt тоже, то есть именно когда bat в конце строки

"doc$ xls$ txt$"
Автор: personag
Дата сообщения: 25.01.2010 10:22
С помощью такого кода можно распечатать на принтер не по-молчанию (здесь, Printer HP2727D) файлы test_*.txt из wordpad (установлен по-умолчанию в windows):


Цитата:
for %%P in (B:\test_*.txt) do "C:\Program Files\Windows NT\Accessories\wordpad.exe" /pt "B:\%%~nxP" "Printer HP2727D"

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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