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

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

Автор: 5peciali5t
Дата сообщения: 28.05.2011 16:10
01MDM
сам почти ничего не понял, но все работает! спасибо
Автор: fire4x
Дата сообщения: 30.05.2011 17:35
Пожалуйста, помогите решить задачу

Условия:
- в папке лежат папки
- в этих папках лежат заполненые папки и файлы
- необходимо удалить эти заполненные папки за исключением некоторых, названия которых известны
Автор: king_stiven
Дата сообщения: 30.05.2011 19:54

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

пример конкретный покажи
Автор: fire4x
Дата сообщения: 30.05.2011 20:12

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


пример конкретный покажи


В папке лежит множество папок и файлов с произвольными именами.
В тех папках - также множество папок и файлов с произвольными именами. И вот эти папки нужно удалить, но не все - а, например, кроме 3-х, названия которых известны.

P.S. Интересен также вариант с вышеуказанной задачей если понадобилось бы проделать аналогичные манипуляции, но уже с файлами.

Автор: A1eksandr1
Дата сообщения: 30.05.2011 20:45
Добрый вечер, помогите решить задачку:
Имеем файл: bk100030.dmp;
Требуется: прочитать 2 последние цифры (т.е.30) в переменную, эти 2 последние цифры каждый день разные, остальное - константа;

Имя файла читаю так:
for /f "tokens=*" %%a in ('dir /b bk1000*.dmp') do set NAME=%%a
А вот дальше запутался tokens и delims

Заранее спасибо!
Автор: yurkesha
Дата сообщения: 30.05.2011 21:19
A1eksandr1
for /f "tokens=*" %%a in ('dir /b bk1000*.dmp') do set "NAME=%%~na"
Ну а дальше надеюсь разберешься?

Добавлено:
ну в смысле set /? и все такое... (%NAME:~-2%)
Автор: king_stiven
Дата сообщения: 30.05.2011 21:22
for /f "tokens=*" %%a in ('dir /b bk1000*.dmp') do set NAME=%%~na
set NAME=%NAME:~-2%

Добавлено:
yurkesha
уже ответил
Автор: 01MDM
Дата сообщения: 30.05.2011 21:25
A1eksandr1
На выбор:

Код:
.... do set "name=%%~na"
echo %name:~-2%
echo %name:bc1000=%
Автор: A1eksandr1
Дата сообщения: 30.05.2011 21:35
yurkesha
спасибо, если не сложно черкни доконца
Автор: yurkesha
Дата сообщения: 30.05.2011 21:37
01MDM
Цитата:
echo %name:bc1000=%
Гут! Вот это самый правильный вариант!


Добавлено:
И еще один возможный вариант:
Код: ECHO %NAME:~6,0%
Автор: wolf0425
Дата сообщения: 30.05.2011 22:20
fire4x как-то так

Код: @echo off
for /d %%a in ( * ) do (
    for /d %%b in ( "%%~a\*" ) do (
        if /i "%%~b" neq "folder1" if /i "%%~b" neq "folder2" if /i "%%~b" neq "folder3" echo rd /s /q "%%~a\%%~b"
    )
)
Автор: fire4x
Дата сообщения: 30.05.2011 22:42

Цитата:
В папке лежит множество папок и файлов с произвольными именами.
В тех папках - также множество папок и файлов с произвольными именами. И вот эти папки нужно удалить, но не все - а, например, кроме 3-х, названия которых известны.

P.S. Интересен также вариант с вышеуказанной задачей если понадобилось бы проделать аналогичные манипуляции, но уже с файлами.


king_stiven

Цитата:
пример конкретный покажи


В папке (например папка WINDOWS) лежит множество папок и файлов с произвольными именами.
В одной из тех папкок (например папка system32) - также множество папок и файлов с произвольными именами.
И вот эти папки (например подпапки в папке oobe) нужно удалить, но не все - а, например, кроме 2-х, названия которых известны (например папки images и sample).


Цитата:
fire4x как-то так

Код:@echo off
for /d %%a in ( * ) do (
for /d %%b in ( "%%~a\*" ) do (
if /i "%%~b" neq "folder1" if /i "%%~b" neq "folder2" if /i "%%~b" neq "folder3" echo rd /s /q "%%~a\%%~b"
)
)


Где нужно поправить, чтобы оно работало:


Код: @echo off
for /d %%a in ( "system32" ) do (
    for /d %%b in ( "oobe" ) do (
        if /i "%%~b" neq "images" if /i "%%~b" neq "sample" echo rd /s /q "%%~a\%%~b"
    )
)
Автор: wolf0425
Дата сообщения: 31.05.2011 00:09

Цитата:
В папке (например папка WINDOWS) лежит множество папок и файлов с произвольными именами.
В одной из тех папкок (например папка system32) - также множество папок и файлов с произвольными именами.
И вот эти папки (например подпапки в папке oobe) нужно удалить,

так все папки в подпапках system32, как ты раньше заказывал, или в единственной oobe?
до списка из единственной - пример обратимо коцается так:

Код: @echo off
cd /d "c:\windows\system32"
for /d %%a in ( "oobe" ) do (
for /d %%b in ( "%%~a\*" ) do (
if /i "%%~nxb" neq "images" if /i "%%~nxb" neq "sample" echo rd /s /q "%%~b"
)
)
Автор: Lutvun
Дата сообщения: 31.05.2011 00:47
Есть строка (например: 2A62B1C). Нужно создать 6 переменных(можно неявных через for) и каждой присвоить отдельный символ строки.
Автор: fire4x
Дата сообщения: 31.05.2011 00:55
wolf0425

Цитата:
до списка из единственной - пример обратимо коцается так:

Код:@echo off
cd /d "c:\windows\system32"
for /d %%a in ( "oobe" ) do (
for /d %%b in ( "%%~a\*" ) do (
if /i "%%~nxb" neq "images" if /i "%%~nxb" neq "sample" echo rd /s /q "%%~b"
)
)

вроде сейчас печатает правильно...


Есть одно НО: известно название папки "первого уровня" - system32, но не её РАСПОЛОЖЕНИЕ!!!
Т.е. батник кидается в папку с произвольным названием, которую в данном примере играет папка windows и от неё "танцует".


Цитата:
Но вообще-то делать сдвоенный цикл для перебора папок в единственной указанной папке совершенно лишне, хватило бы постановки в формулировке "удалить все папки c:\windows\system32\oobe\*, имя которых не совпадает с заказанными вариантами" - решение существенно короче.


А как задать удаление папок, названия которых не входят в перечисленные названия?


Цитата:
Цитата:P.S. Распиште пожалуйста каким образом это работает - какие конструкции за что отвечают.

для понимания каких строчек не помогает встроенный хэлп? for /? и if /?


Ну вот, например, выражение, предложенное сначала "%%~b" сменилось на "%%~nxb" - какова их функциональность.
Или "neq" - что это и с чем его едят?

Автор: res2001
Дата сообщения: 31.05.2011 07:49
Lutvun

Код: @echo off
set "NN=1"
call:sets "2A62B1C"
set ch

goto:eof

:sets
if "%~1" equ "" exit /b
set "val=%~1"
set "ch%NN%=%val:~0,1%"
set /a "NN+=1"
call:sets %val:~1%
exit /b
Автор: Maxim_Boytsov
Дата сообщения: 31.05.2011 11:52
Ребята, помогите пожалуйста. Появилась потребность в написании bat-файла, который бы запускал рекламный ролик на втором мониторе платежного терминала при запуске ОС.
Спасибо заранее. На все дополнительные вопросы отвечу. Если не в той теме пишу, извиняюсь.
Просто нет времени вспоминать команды MS-DOS.
Автор: wolf0425
Дата сообщения: 31.05.2011 12:17

Цитата:
А как задать удаление папок, названия которых не входят в перечисленные названия?
выкусить слово echo перед rd - начнет удалять.
до проверки того, что батник предлагает удалять именно те папки, что требуется - этого лучше не делать, запрос подтверждения пользователя там запрещен. к варианту от res2001 это относится в равной мере.


Цитата:
Ну вот, например, выражение, предложенное сначала "%%~b" сменилось на "%%~nxb" - какова их функциональность.
какие-то проблемы дочитать до конца for /?

%%~b - целиком очередное имя (каталога) вложенного цикла, "%%~nxb" - только его имя.расширение, без пути.


Цитата:
Есть одно НО: известно название папки "первого уровня" - system32, но не её РАСПОЛОЖЕНИЕ!!!
ну хоть что-то о её расположении известно - от какого места её искать, на каком диске, в какой вложенности и на чьем вообще компьютере?
а то ведь таких папок можно много найти, если везде что-то удалять - будет ой.


Добавлено:
Maxim_Boytsov
Цитата:
Просто нет времени вспоминать команды MS-DOS.
а тут тебе не команды MS-DOS вспоминать надо, а читать хэлп по ключикам командной строки того проигрывателя, которым собрался проигрывать - чтоб он именно на второй монитор показывать стал.
Автор: Maxim_Boytsov
Дата сообщения: 31.05.2011 12:22
Хорошо, это я понял, что в настройках плеера можно задать..
Как сделать так, чтобы запускался видеофайл при старте ОС?
Автор: wolf0425
Дата сообщения: 31.05.2011 12:26

Цитата:
Как сделать так, чтобы запускался видеофайл при старте ОС?
проще всего сначала создать ярлык с нужными ключами запуска на рабочем столе, отладить, потом мышкой скопировать ярлык в кнопку Старт, в папку
C:\Documents and Settings\username\Главное меню\Программы\Автозагрузка
(имя юзера и написание имен каталогов в случае нерусской ОС - посмотреть по месту)
Автор: Maxim_Boytsov
Дата сообщения: 31.05.2011 14:29

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



так и сделал, но сталкнулся с другой проблемой: после запуска Windows запускается видео-ролик на втором мониторе, а вот на первом автоматиченски меняется частота цветопередачи с 32 бит на 8 бит..как это исправить не могу понять..

Добавлено:
Дополню, что используется Windows XP Pro, стоит видеокарточка GeForce4 MX 440 with AGP8X
ну и KMPlayer используется для воспроизведения..
Автор: res2001
Дата сообщения: 31.05.2011 15:33
Maxim_Boytsov
Вопрос не по теме топика.
Тут похоже дело в драйверах или в плеере.
Попробуй обновится.
Автор: fire4x
Дата сообщения: 31.05.2011 15:53
res2001

Цитата:
fire4x
Вот более общий вариант:

Код:@echo off
for /d %%a in (*) do for /d %%b in (%%a\*) do findstr /i /c:"%%~nxb" folders.lst >nul || echo rd /s/q %%b


Список пропускаемых папок в файле folders.lst


Не работает - похоже не понимает что "считать" путь нужно из папки в которой лежит.

А как можно перечислить пропускаемые папки в самом батнике, ну чтобы одним файлом сделать?

wolf0425

Цитата:
Цитата:Есть одно НО: известно название папки "первого уровня" - system32, но не её РАСПОЛОЖЕНИЕ!!!

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


Вот видите, у Вас тоже до конца читать не всегда получается

Цитата:
Есть одно НО: известно название папки "первого уровня" - system32, но не её РАСПОЛОЖЕНИЕ!!!
Т.е. батник кидается в папку с произвольным названием, которую в данном примере играет папка windows и от неё "танцует".


Автор: ASE_DAG
Дата сообщения: 31.05.2011 16:00
> батник кидается в папку с произвольным названием, которую в данном примере играет папка windows и от неё "танцует"
Более чем странный подход — исходить из пути исполняющегося скрипта. Почему не от текущего каталога?
Автор: res2001
Дата сообщения: 31.05.2011 16:50
fire4x

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

Наверное как-то так:

Код: @echo off
for /d %%a in (%~dp0*) do for /d %%b in (%%a\*) do findstr /b /i /c:"#%%~nxb" "%~0" >nul || echo rd /s/q "%%~b"
goto:eof

#folder1
#folder2
Автор: AZJIO
Дата сообщения: 31.05.2011 16:57
Обновил утилитку Converter CMD to BBcode. Можно ещё поддержку ком-строки сделать для преобразования прямо из редактора Notepad++ в буфер.
Автор: fire4x
Дата сообщения: 31.05.2011 18:37
res2001

Цитата:
Наверное как-то так:

Код:@echo off
for /d %%a in (%~dp0\*) do for /d %%b in (%%a\*) do findstr /b /i /c:"#%%~nxb" "%~0" >nul || echo rd /s/q %%b
goto:eof

#folder1
#folder2


Не хочет запускаться...

P.S. Если нужно указать конкретные каталоги первого и второго уровня (которые в примере - system32 и oobe), то вместо чего их подставлять?

ASE_DAG

Цитата:
> батник кидается в папку с произвольным названием, которую в данном примере играет папка windows и от неё "танцует"
Более чем странный подход — исходить из пути исполняющегося скрипта. Почему не от текущего каталога?


Ау, в батнике пути быть не может, потому как он может быть помещен в ЛЮБУЮ ПАПКУ.

Автор: ASE_DAG
Дата сообщения: 31.05.2011 18:47
fire4x
> Ау
Ась?

> путь к той папке, в которую он будет помещен, НЕИЗВЕСЕН
Я вам и говорю: так не делают. Путь исполняемого файла за директорию над которой надо произвести к.-либо действия не принимают. Подразумеваемой по-умолчанию директорией является текущая.
Автор: fire4x
Дата сообщения: 31.05.2011 19:23
ASE_DAG

Цитата:
> путь к той папке, в которую он будет помещен, НЕИЗВЕСЕН
Я вам и говорю: так не делают.


В смысле??? Т.е. Вы хотите сказать, что путь ОБЯЗАТЕЛЬНО должен быть ИЗВЕСТЕН?

ASE_DAG

Цитата:
Путь исполняемого файла за директорию над которой надо произвести к.-либо действия не принимают.


А по проще... а то не особо понятно

ASE_DAG

Цитата:
Подразумеваемой по-умолчанию директорией является текущая.


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

P.S. Для тех, кто не понял моей задачи, я попробую сформулировать её как можно проще:

* Нужно поместить в папку WINDOWS батник, который залезет например в system32, а от-туда например в oobe и удалит из нее все папки кроме нескольких (имена которых будут перечисленны в самом батнике).

* Папка WINDOWS дана исключительно в качестве примера.

* Вместо нее (папки WINDOWS) будет абсолютно любая папка, расположение которой произвольно.
Автор: ASE_DAG
Дата сообщения: 31.05.2011 19:40
fire4x
> папка, в которую помещается батник, и является текущей для оного
Текущей папкой является текущая (англ. working directory, current directory) и никакая другая.

> А по проще
Путь до исполняющегося скрипта (в сабже — %~dp0, кажется) в скрипте использовать не надо. Так понятнее?

> Вы хотите сказать, что путь ОБЯЗАТЕЛЬНО должен быть ИЗВЕСТЕН?
Я не знаю, что вы имеете в виду под «известен», но сказать я хочу только то, что по-умолчанию следует отталкиваться от текущей директории, а не от директории, в которой расположен запущенный скрипт.

Добавлено:
> Для тех, кто не понял моей задачи
Здесь все все поняли, для вас повторяю еще раз: в качестве единственного принимаемого во внимание параметра ваш потенциальный скрипт использует собственное полное имя, а так делать не надо.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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