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

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

Автор: Smitis
Дата сообщения: 01.02.2009 01:29
Kilyan

Цитата:
Подскажите, существует ли возможность, не прибегая к сторонним утилитам, пробежаться по текстовому файлу и устранить все дубликаты строк, записав результат в указанный файл!?

Писать нет времени, но предложу следущую схему:

Если порядок строк не имеет значения:
- текстовый файл сортируем (sort) и результат пишем во временный файл.
- обрабатываем временный файл командой for, переписывая строки в файл с оригинальным именем. Сравниваем предыдущую строку с текущей, если они совпадают - пропускаем.

Если порядок строк имеет значение:
- текстовый файл сортируем (sort) и результат пишем во временный файл.
- обрабатываем временный файл командой for, сравнивая предыдущую строку с текущей.
- если строки равны, обрабатываем командой for оригинальный файл, переписывая строки в другой временный файл, пропуская все строки, найденные первой командой for, кроме первого совпадения. Переписываем результат (move) поверх оригинала и продолжаем искать дубликаты, для оптимизации пропуская строки, если дубликатов более двух.

Ну, где-то так...
Автор: Maza_Faka
Дата сообщения: 01.02.2009 10:35
Zakkazak

Цитата:
по сценарию открыть 1-е приложение, затем после того как юзер закроет 1-е приложение, открыть 2-ое?


Код:
@Echo Off
Start /wait "" "d:\totalcmd\utility\CCleaner\Winsys2.ini"
"d:\totalcmd\utility\CCleaner\CCleaner.exe"
Автор: dimk88
Дата сообщения: 01.02.2009 14:41
Подскажите плз,
есть путь C:\Folder1\Какая-то папка, имя неизвестно\file.txt

Нужно добраться до file.txt =) Как нужно обозначить папку, имя которой неизвестно?) Спасиба!
Автор: Zakkazak
Дата сообщения: 01.02.2009 15:39
Maza_Faka

Код: @Echo Off
Start /wait "%ProgramFiles%\SciTE\SciTE.exe" "%Commander_Path%\utility\CCleaner\Winsys2.ini"
"%Commander_Path%\utility\CCleaner\CCleaner.exe"
Автор: Elroir
Дата сообщения: 01.02.2009 16:10
dimk88

Код:
@echo off
setlocal
pushd "C:\Folder1\"
for /f "tokens=*" %%a in ('dir /b /ad') do if exist "%%a\file.txt" set "found=%cd%\%%a"
if defined found echo Path to file : %found%\file.txt
popd
Автор: mozers
Дата сообщения: 02.02.2009 16:53
Elroir
Извини, уважаемый, но с задачкой поиска файлов по неизвестному пути что то ты перемудрил...
Код: @ECHO OFF
SET folder=\\Server\Folder1
SET file=xfile.txt
FOR /F %%i IN ('dir "%folder%\%file%" /s /b /a:-d') DO ECHO %%i
Автор: Elroir
Дата сообщения: 02.02.2009 17:58
mozers
А если там ветка директорий и где-нибудь в глубине есть еще один файл с таким названием?
Автор: Kilyan
Дата сообщения: 02.02.2009 18:45
Elroir
Проверил код mozers - работает и с
Цитата:
в глубине есть еще один файл с таким названием?

Уже сохранил себе - а вдруг понадобится!
Автор: Zakkazak
Дата сообщения: 02.02.2009 19:45
Elroir

Цитата:
Zakkazak
У Maza_Faka там не зря кавычки после /wait стоят.
хитро и работает, я думал это для редактора Мазафака поставил.
Автор: Kilyan
Дата сообщения: 02.02.2009 22:05
mozers

Цитата:
Elroir
Извини, уважаемый, но с задачкой поиска файлов по неизвестному пути что то ты перемудрил...
Код:@ECHO OFF
SET folder=\\Server\Folder1
SET file=xfile.txt
FOR /F %%i IN ('dir "%folder%\%file%" /s /b /a:-d') DO ECHO %%i

Работает отменно но есть глюк, если в поддиректориях встречается каталог с русским или латинским именем и в нем будет пробел(например "Мои документы"). Файл от сюда не выведет, а концом вывода будет бла-бла\Мои. Как исправить? Примерчик понадобился однако!
Автор: Elroir
Дата сообщения: 02.02.2009 23:20
Kilyan

Цитата:
Как исправить?


Код:
FOR /F "tokens=*" %%i IN ('dir "%folder%\%file%" /s /b /a:-d') DO ECHO %%i
Автор: VergilDevil
Дата сообщения: 02.02.2009 23:42
Имеется каталог с файлами. Нужно имена файлов выписать в ряд, но так, чтобы перед именем был какой нибудь текст. Ну например:
Папка с файлами.
Получаем:
фигня pesnja.mp3
фигня kartinka.jpg
...
Ну и т.д. Надеюсь понятно выразился =)
Автор: Kilyan
Дата сообщения: 02.02.2009 23:43
Elroir

Хвала вам! что вы тут выручаете! с пол пинка - и все летает! ... Вот бы еще шапка восполнялась нужными примерчиками - чтоб на примерах можно было найти что то для себя, и возможно не дублируя через время одно и тоже (это мое пожелание авось кто и услышит)
Автор: Elroir
Дата сообщения: 03.02.2009 00:06
Kilyan
Загляни в шапку топика "Задачи на bat-файлах". Там много чего интересного

Добавлено:
VergilDevil

Код:
@echo off
chcp 1251>nul
for %%a in (*.*) do echo фигня %%a>>list.txt
Автор: VergilDevil
Дата сообщения: 03.02.2009 00:12
Elroir, спасибо
Автор: xlopik
Дата сообщения: 04.02.2009 12:58
Эсть такая проблема. Нужно написать батник который будет проверять включена ли сетевая карта (есль не то включить), и проставлять айпи.
С айпи розабрался, но только под ХР под Висту не канаэт
А как включать
Автор: Kilyan
Дата сообщения: 04.02.2009 21:57
Elroir
Помогите решить, а точнее дополнить уже найденный код батника[more]@echo off

Set File=log.txt
Set Num=1

:Loop

If Not Exist %File% Goto EndLoop
For %%a In (%File%) Do (
Set FName=%%~na
Set FExt=%%~xa)
Set NewFName=%FName%_%Num%%FExt%
Set /a Num=%Num% +1
(If Exist %NewFName% Goto Loop) && (Set NewFName=%NewFName%)
Set File=%NewFName% else Set File=%File%

:EndLoop

Echo %File%
rem pause
[/more] в котором переименовывается существующий файл, если таковой существует.
Дополнить: переименовывать до уазанного числа, а именно - на примере резервного копирование nnBackup - замещая текущий архив новым и т.д.
Автор: Elroir
Дата сообщения: 04.02.2009 23:48
Kilyan
Я никогда не работал с nnBackup. Видимо поэтому я даже не понимаю, что надо сделать.
Автор: Dekabryi
Дата сообщения: 05.02.2009 05:12
Zakkazak

вот тебе пример
Подставь сюда свои значения
start /wait notepad
start /wait calc
Автор: Kilyan
Дата сообщения: 05.02.2009 07:23
Elroir
Хорошо.теперь подробнее:
укажем кол-во допустимых инкрементов=2
Указываем файл=файл1, проверяем его на галичие если находим переименовываем (с файл1 в файл1_1), при следующем запуске опять проверка, но если находим файл1 и файл1_1 то файл один1_1 должен стать файл1_2, файл1 должен стать файл1_1 ну а файл файлом1.
Тким образом - переименование файлов будет идти до указанной точки и старые файлы могут затираться новыми.
И всегда файлов будет в этом случае 3 (текущий фай1,файл1_1, файл1_2)
в этом же [more=примере]@echo off

Set File=log.txt
Set Num=1

:Loop

If Not Exist %File% Goto EndLoop
For %%a In (%File%) Do (
Set FName=%%~na
Set FExt=%%~xa)
Set NewFName=%FName%_%Num%%FExt%
Set /a Num=%Num% +1
(If Exist %NewFName% Goto Loop) && (Set NewFName=%NewFName%)
Set File=%NewFName% else Set File=%File%

:EndLoop

Echo %File%
rem pause
[/more] идет просто инкрементное добавление следующего значения.
ну гдето так!
Автор: Maza_Faka
Дата сообщения: 05.02.2009 10:17
xlopik

Цитата:
батник который будет проверять включена ли сетевая карта (есль не то включить)

Можно используя утилиту devcon.exe

Код:
@Echo Off

Set "DevName=Realtek RTL8139 Family PCI Fast Ethernet NIC"
Set TmpFile=~tmp.txt
Set Count=0

Setlocal enabledelayedexpansion

devcon hwids =net>%TmpFile%
Type %TmpFile% | Find "%DevName%">nul || Exit

For /F "Tokens=*" %%A In (%TmpFile%) Do (
    Set /A Count+=1
    Echo "%%A" | Find "Name: %DevName%">nul && GoTo :IDSet
    )
GoTo :EOF

:IDSet
Set /A Count+=1
For /F "Skip=%Count% Tokens=*" %%A In (%TmpFile%) Do Set ID="%%A" && GoTo :DevDisable
GoTo :EOF

:DevDisable
devcon status %ID% | Find /I "disabled">nul && devcon enable %ID%
del /f /q %TmpFile%>nul
Автор: Elroir
Дата сообщения: 05.02.2009 14:08
Maza_Faka

Цитата:
Есть ли методы выхода из цикла For без использования GoTo?

Нет.
Только если вынести for в отдельный блок (call :forLoop), можно прервать командой "exit /b"
Автор: hanssliver
Дата сообщения: 05.02.2009 20:15
уважаемые гуру, имеется такой батник в автозагрузке:

Код:
dir "C:\Program Files (x86)\Autodesk\Backburner\"
@cmdow @ /hid
timeout 80
start /low /MIN server.exe
Автор: xlopik
Дата сообщения: 05.02.2009 20:24

Цитата:
xlopik

Цитата:
батник который будет проверять включена ли сетевая карта (есль не то включить)

Можно используя утилиту devcon.exe

Код:

@Echo Off

Set "DevName=Realtek RTL8139 Family PCI Fast Ethernet NIC"
Set TmpFile=~tmp.txt
Set Count=0

Setlocal enabledelayedexpansion

devcon hwids =net>%TmpFile%
Type %TmpFile% | Find "%DevName%">nul || Exit

For /F "Tokens=*" %%A In (%TmpFile%) Do (
Set /A Count+=1
Echo "%%A" | Find "Name: %DevName%">nul && GoTo :IDSet
)
GoTo :EOF

:IDSet
Set /A Count+=1
For /F "Skip=%Count% Tokens=*" %%A In (%TmpFile%) Do Set ID="%%A" && GoTo evDisable
GoTo :EOF

evDisable
devcon status %ID% | Find /I "disabled">nul && devcon enable %ID%
del /f /q %TmpFile%>nul


Переменной DevName присваиваешь имя сетевого адаптера (можно посмотреть в "Диспетчере устройств")

а как сделать для универсальной сетевой карты?
Автор: An0xiety
Дата сообщения: 06.02.2009 03:38
Доброе время суток.
Нужно через батник, в текстовом файле, пред строками которые начинаются на Logfile.. вставлять символ # (т.е. комментировать их) и сохранять в тот же файл. Причем, при 1-м проходе надо, чтоб все строки с логами комментировались, а при 2-м, - разкомментировались. Надо реализовать без помощи посторонних утилит. 3-й день бьюсь, не могу решить.
Автор: Maza_Faka
Дата сообщения: 06.02.2009 07:05
xlopik

Цитата:
а как сделать для универсальной сетевой карты?

Можно передавать имя сетевой карты батнику в качестве параметра:
net_enable.bat "Realtek RTL8139 Family PCI Fast Ethernet NIC"


Код:
@Echo Off

If "%~1"=="" Exit

Set "DevName=%~1"
Set TmpFile=~tmp.txt
Set Count=0

Setlocal enabledelayedexpansion

devcon hwids =net>%TmpFile%
Type %TmpFile% | Find "%DevName%">nul || Goto :EOF

For /F "Tokens=*" %%A In (%TmpFile%) Do (
    Set /A Count+=1
    Echo "%%A" | Find "Name: %DevName%">nul && GoTo :IDSet
    )
GoTo :EOF

:IDSet
Set /A Count+=1
For /F "Skip=%Count% Tokens=*" %%A In (%TmpFile%) Do Set ID="%%A" && GoTo :DevDisable
GoTo :EOF

:DevDisable
devcon status %ID% | Find /I "disabled">nul && devcon enable %ID%
del /f /q %TmpFile%>nul
Автор: hanssliver
Дата сообщения: 06.02.2009 09:20

Цитата:
Если запустить код из ком. строки, что происходит?

тоже самое и просто при запуске..
раньше был ярлык в автозагрузке, с ним работает нормально
Автор: anatoly2002
Дата сообщения: 06.02.2009 09:37
Полезная утилита - hs_message.exe из пакета утилит для организации интерфейса в bat-файлах. Знает ли кто-нибудь нечто подобное, допускающее изменение надписей на кнопках?
Автор: Maza_Faka
Дата сообщения: 06.02.2009 10:58
hanssliver

Цитата:
тоже самое и просто при запуске

Попробуй временно отключить брандмауэр и запустить вышеуказанный код, если проблема исчезнет, значит дело в настройках брандмауэра.
Автор: An0xiety
Дата сообщения: 07.02.2009 19:12
Maza_Faka

Спасибо, дружище, за то, что подсказал SED.EXE, это просто отличная утилита.
Тут неплохой мануал к ней на английском

С помощью SED.EXE решил комментирование/раскомментирование строк начинающихся на LogFile таким образом:

Код: sed -n "/LogFile/p" <input.txt | Findstr /i "^Logfile" >Nul 2>&1 && sed s/^LogFile/#LogFile/g <input.txt >output.txt || sed s/^#LogFile/LogFile/g <input.txt >output.txt

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


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