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

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

Автор: den06051979
Дата сообщения: 28.01.2010 05:25

Цитата:
попробуй переставить их в начало

Код:
start /B /NORMAL "C:\Program Files\SAM CoDeC Pack\Players\MPCHC\mpc-hc.exe"  /play /fullscreen  "D:\TV+\10.2009\10.2009_disk_D.m3u"

Так тоже не работает!
Был вариант с кавычками. Мне предлагали кавычками регулировать параметры, но я так и не смог.

Добавлено:

Цитата:

попробуй переставить их в начало  
 
Код:
start /B /NORMAL "C:\Program Files\SAM CoDeC Pack\Players\MPCHC\mpc-hc.exe"  /play /fullscreen  "D:\TV+\10.2009\10.2009_disk_D.m3u"

Так тоже не работает!
Был вариант с кавычками. Мне предлагали кавычками регулировать параметры, но я так и не смог.

Может кому пригодится. Вот правильный вариант:
start /B /NORMAL "" "C:\Program Files\SAM CoDeC Pack\Players\MPCHC\mpc-hc.exe" "D:\TV+\2010.01\2010.01_disk_D.m3u" /play /fullscreen"
Автор: BumerangII
Дата сообщения: 28.01.2010 09:03
wolf0425

Цитата:
Добавлено:
BumerangII

Код:
find "10.3.52.36"< %windir%\system32\drivers\etc\hosts && echo Found!


попробывал не работает
при вот таком
Код: @echo off
find "10.3.52.3"< %windir%\system32\drivers\etc\hosts && goto test
echo Not found
:test
echo found
Автор: wolf0425
Дата сообщения: 28.01.2010 09:30

Цитата:
попробывал не работает
а почему у меня работает?
проверь глазками - find "10.3.52.3"< %windir%\system32\drivers\etc\hosts что нибудь у тебя находит?

проверка, кстати, гнилая - строка с "10.3.52.3" вполне может присутствовать, но надо бы проверять что она не комментарий

Автор: BumerangII
Дата сообщения: 28.01.2010 10:28
wolf0425
спасибо заработало.

Автор: vb96
Дата сообщения: 28.01.2010 12:29
Всем доброго дня!

Мастера, помогите плиз! Вот фрагмент батника, с которым я чего-то затупил:

for /R "%DP%" %%F in (*.*) do %IFNOT% (
set Tail=%%~dpF
set Tail=!Tail:%DP%=!
for /F "usebackq delims=" %%S in (%File%) do (
set Str=%%S
if not "!Tail!"=="" set Str=!Str:!Tail!=!
echo "!Str!""!Tail!"
...

Не пашет последний set. По смыслу - из строки Str надо удалить строку Tail.
Например: перед этим присвоением Str = abc\defg\hijk и Tail = abc\
в результате Str = defg\hijk
Обратите внимание, выше есть аналогичное присвоение для Tail, которое работает как надо. Здесь же проблема, как я понимаю, во вложенности !
Так как бы все-таки выкрутиться?
Автор: Kirillhome
Дата сообщения: 28.01.2010 12:51
vb96
А что такое %IFNOT%??? Что такое %DP%??? Что такое %File%???
Мне вот эта конструкция .. не очень понятна: set Tail=!Tail:%DP%=!
Приведи полный текст и логику...

На сколько я помню, такая конструкция Str=!Str:!Tail!=! - не должна работать, в отличии от set Tail=!Tail:%DP%=! (хотя последнюю всё равно не понимаю - к чему там последний знак равенства).
Автор: king_stiven
Дата сообщения: 28.01.2010 12:57
vb96

Код: for /R "%DP%" %%F in (*.*) do %IFNOT% (
set Tail=%%~dpF
set Tail=!Tail:%DP%=!
for /F "usebackq delims=" %%S in (%File%) do (
set Str=%%S
if not "!Tail!"=="" call fgh
...
)
)
goto :eof
fgh
set Str=!Str:%Tail%=!
echo "!Str!""%Tail%"
Автор: vb96
Дата сообщения: 28.01.2010 13:33
Kirillhome


Цитата:
А что такое %IFNOT%??? Что такое %DP%??? Что такое %File%???
Мне вот эта конструкция .. не очень понятна: set Tail=!Tail:%DP%=!
Приведи полный текст и логику...

Полный текст изрядно великоват будет, да и не влияет. В %IFNOT% приходит переменная последовательность условий какие файлы (%%F) в цикле обрабатывать, а какие сразу на фиг. В %DP%, соответственно, полный стартовый путь. В %File% - файл, из которого берем строки (%%S).


Цитата:
На сколько я помню, такая конструкция Str=!Str:!Tail!=! - не должна работать, в отличии от set Tail=!Tail:%DP%=! (хотя последнюю всё равно не понимаю - к чему там последний знак равенства).

Логика же простая. В Tail=!Tail:%DP%=! из полного пути к обрабатываемому файлу удаляем полный стартовый. Остается строка вида "имя_поддиректории\...\имя_файла" (без кавычек). Во вложенном же цикле, из каждой строки S (а в них тоже имена файлов с путями, относительными к стартовому) надо удалить аккурат этот относительный хвостик Tail. Вот собссно.
Я и сам понимаю, что Str=!Str:!Tail!=! тут неверно, вопрос в том, чем ее заменить.

Добавлено:
king_stiven

Ага, ну точно!
Огромное спасибо!!
Что-то я и впрямь затупил. Интересно только, а вот без процедуры оно похоже никак не решаемо что-ли?
Автор: king_stiven
Дата сообщения: 28.01.2010 14:41
vb96

Цитата:
а вот без процедуры оно похоже никак не решаемо что-ли?

В твоём виде никак. Или просмотри последние 4 страницы мои сообщения там было считали каталоги от корня используя разделитель \
Автор: Ykidia
Дата сообщения: 28.01.2010 15:01
Kirillhome

Цитата:
Есть засады:
1) mountvoll - не вывел мне информацию о виртуальном приводе (реального - нет, проверить не могу).
2) mountvoll - не вывел мне информацию о подмепленном сетевом диске (т.е. net use * \\ресурс\шара - Диск z cейчас подключен, смотрю через mountvoll - нет ничего).

Интересно.
1) С реальным все должно быть нормально, а с виртуальным - да и фиг с ним.
2) Подключенные сетевые диски можно посмотреть/подключить/удалить при помощи net use. Только у меня при просмотре подключенного диска M: командой net use M: выводится такая инфа:

Код: Локальное имя M:
Удаленное имя \\Server\M
Тип ресурса Диск
Состояние OK
Открыто 2
Подключено 1
Команда выполнена успешно.
Автор: Kirillhome
Дата сообщения: 28.01.2010 19:03
Ykidia

Цитата:
Как мне присвоить переменной значение удаленного имени ("\\Server\M") ?

К примеру - так:

Код:
@echo off
Set Drive_E=""
for /F "tokens=3" %%a in ('net use E: ^2^>nul^|findstr "\\"') do (Set Drive_E=%%a)
if NOT %Drive_E%=="" (
net use E: /DELETE >nul
)
Автор: vb96
Дата сообщения: 28.01.2010 20:34
Kirillhome


Цитата:
Честно - просто не понимаю, как в данном случае работает команда

for /R "%DP%" %%F in (*.*) do %IFNOT% (.....

Поэтому и попросил пример


Пример? Да не вопрос .

Одним из параметров моего батника является строка с набором расширений файлов, которые обрабатывать не надо. Например "jpg|gif|png|ico". Разделителем служит исключительно |. А по тексту так:

Код:
...
set IFNOT=if not "%%F"==""
...
call :ExtList "%~3"
...
:ExtList
for /F "tokens=1* delims=|" %%J in (%1) do (
set IFNOT=!IFNOT!if /I not "%%~xF"==".%%J"
if not "%%K"=="" call :ExtList "%%K"
)
exit /b
Автор: Maikl_relax
Дата сообщения: 29.01.2010 10:48
wolf0425
Kirillhome
Мужчины, во-первых спасибо. Только руки дошли вдумчиво проделать.
Но не работает как надо к сож =(

Делаю так (тренируясь на мышах):

Код: rd /q/s "F:\NETSHATRE\1\NEW_STRU" 2>nul
for /f "delims=" %%a in (' dir /b/s/a:d "F:\NETSHATRE\1\*NEW_STRU" ') do (if "%%~nxa"=="NEW_STRU" (echo "%%~fa"))
Автор: Kirillhome
Дата сообщения: 29.01.2010 16:44
Maikl_relax
Судя по эху - у тебя выводится весь список.

Цитата:
F:\NETSHATRE\1\1\NEW_STRU
F:\NETSHATRE\1\2010-01-19\NEW_STRU
F:\NETSHATRE\1\3\NEW_STRU
F:\NETSHATRE\1\4\NEW_STRU
F:\NETSHATRE\1\5\NEW_STRU

Или нет?

В чём заковыка то?
Автор: Ykidia
Дата сообщения: 29.01.2010 16:53
Вот, увидел решение схожей задачи здесь, однако мне и этого мало. К примеру, я решил попробовать искать номер диска для diskpart не по размеру (хотя увидел где-то, как можно сравнивать большие числа - надо просто "откусывать" от строки с числом младшие разряды, а потом сравнивать их как обычно), а по типу - оказалось, diskpart показывает тип носителя, если, выбрав диск, дать команду detail disk. То есть, скрипт для diskpart

Код: select disk 0
detail disk
Автор: king_stiven
Дата сообщения: 29.01.2010 21:52
Ykidia
for %%i in (0 1 2 3 4) do (
echo select disk %%i> "%temp%\1.txt"
echo detail disk>> "%temp%\1.txt"
for ... ('DiskPart /S "%temp%\1.txt" ^| findstr "RAID"') ...

Добавлено:

Цитата:
Как мне ограничить поиск нужной строки только в конкретном месте (например, до строки "LUN ID" или до строки "---")?

findstr /c:": RAID"
Автор: takt03
Дата сообщения: 30.01.2010 02:23
Всем привет. Короче задача такая, как узнать свой ип в интернете через цмд. Просто провайдер использует динамическую раздачу ИП а за статистическую надо бабосы плотить. Мне надо чтоб допустим если произойдёт отключение от нэта, мой ком мне выслал новый свой ип. И высылал каждый раз когда он у него меняется. В принципе отсылку я сам могу сделать а вот как из цмд узнать свой ип я не знаю.

Автор: wolf0425
Дата сообщения: 30.01.2010 03:52

Цитата:
Просто провайдер использует динамическую раздачу ИП а за статистическую надо бабосы плотить.
ты уже проверил, что твой ip доступен снаружи? В смысле - что тебе делают динамический внешний ip, а не динамический ip в локалке и выход в интернет через NAT?



Цитата:
а вот как из цмд узнать свой ип я не знаю.
например так

Код: For /f %%a in ('wget -q -O - http://www.netikus.net/show_ip.html ') do set "newip=%%a"
Автор: senovr
Дата сообщения: 30.01.2010 17:53
Есть задача.
На диске существует папка с логами ( например D:/data/
в ней существует большое количество подкаталогов с разным уровнем вложенности.
В любом случае, на последнем уровне структура папок будет следующая:
D:/data/много вложенных папок/ last folder
в last folder содержатся следующие файлы:
log_full. csv
log_short.csv
и так же папка errorlog, в которой содержатся логи об ошибках ( файлы типа log1.txt, log2.txt и т.д)
Что необходимо сделать:
а) заархивировать папку errorlog в errorlog.7z ( оставить в той же самой last folder), после архивации исходную папку удалить.
б) заархивировать файл log_full.csv в log_full.7z , и так же удалить исходный несжатый лог.
Затем, обойти все папки на предмет наличия этих файлов ( и папки errorlog) и везде где нашли- выполнить такую же архивацию.
Вот что пока есть :
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
echo off
echo Please wait...
mode con codepage select=1251 > nul
Set StartPath=%~dp0
for /r %%d in (.) do (
cd %%d
echo %~dp0

pause
for %%f in (*full.csv) do (
If %%d
echo %%d%%f>> file3.txt
echo %%d
echo %%f

pause
%StartPath%_Tools\7za.exe a -mx=9 -md=32m "%%d\log_full.7z" @from3.txt

)
pause

)
Этот батник должен архивировать только log_full, а что сделать с папкой?
совсем себе голову сломал...
Автор: king_stiven
Дата сообщения: 30.01.2010 18:19
senovr
Мм.. твоя комстрока не выдаёт ошибки на строчку
If %%d
echo %%d%%f>> file3.txt
?

Задание смутноватое, по каким признакам искать папку errorlog?
1 вар нужно заархивировать все папки errorlog
2 вар нужно заархивировать только те папки errorlog, если она в одной папке с log_full. csv и log_short.csv
3 вар нужно заархивировать только те папки errorlog, если она в одной папке last folder с файлами log_full. csv и log_short.csv
?
Автор: takt03
Дата сообщения: 30.01.2010 19:36
wolf0425
For /f %%a in ('wget -q -O - http://www.netikus.net/show_ip.html ') do set "newip=%%a"

D:\111\tel>For /F %a in ('wget -q -O - http://www.netikus.net/show_ip.html ') do
set "newip=%a"
"wget" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.


Для продолжения нажмите любую клавишу . . .


Не пашет (((
Автор: wolf0425
Дата сообщения: 30.01.2010 19:51

Цитата:
"wget" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
что - и на гугле забанен, и про полезные утилиты в шапке темы не читал?
Автор: senovr
Дата сообщения: 30.01.2010 21:06
king_stiven
Специфика сбора логов такая, что в той папке где есть full и short логи, обязательно будет папка errorlog
Соответственно заархивировать нужно все папки errorlog
Автор: king_stiven
Дата сообщения: 30.01.2010 22:29
senovr
for /r "D:/data" %%i in (.) do if exist "%%i\log_full.csv" if exist "%%i\log_short.csv" if exist "%%i\errorlog" echo "%%i\errorlog"
вместо echo пиши свою команду
Автор: Ku60Pr
Дата сообщения: 01.02.2010 08:38
доброго времени суток...
Есть задача определить группу пользователя в Active Directory

Код:
Net User %username% /domain | find "*ЦО" 1>nul 2>&1
if errorlevel 1 (
set userAD=co
)
Net User %username% /domain | find "*ТМ" 1>nul 2>&1
if errorlevel 1 (
set userAD=tm
)
Net User %username% /domain | find "*НВ" 1>nul 2>&1
if errorlevel 1 (
set userAD=nv1
)
Net User %username% /domain | find "*СУ" 1>nul 2>&1
if errorlevel 1 (
set userAD=su
)
Автор: UltraAcid
Дата сообщения: 01.02.2010 11:22
Пивет всем

вот сделал я себе USB флешку на основе syslinux и grub4dos. Закинул туда CIACommander, WinDOS и freeDOS с Paragon 4 драйвером для поддержки NTFS. (Брал от сюда: http://forum.ru-board.com/topic.cgi?forum=35&topic=0982#1 [?] )

Решил смастирить батник для авто определения Windows партиций, и копирования SAM и SYSTEM файлов на USB.

Проблема в том что в Windows батник работает норм. а если запускаю из под DOS он не определяет Windows партицию...

Может потскажите что в коде не так?
Спасибо

Батник: http://rapidshare.com/files/344239123/getsam.rar


Код:
@echo off
set WINPATCH=none

echo Looking for Windows partition, please wait...
for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%a:\Windows set WINPATCH=%%a:\Windows
if %WINPATCH% == none GoTo nop

echo.
echo Windows partition found in: %WINPATCH%
echo.
CHOICE /N /C:YN "Copy SAM and SYSTEM files? (Yes=Y/No=N)"
IF ERRORLEVEL ==2 GOTO No
IF ERRORLEVEL ==1 GOTO Yes

:nop
echo.
echo Windows partition not found...
echo Looking for WinNT partition, please wait...
for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%a:\WinNT set WINPATCH=%%a:\WinNT
if %WINPATCH% == none GoTo nofind

:nofind
echo.
echo Sorry, Windows installation not found...
GoTo end

:No
GoTo end

:Yes
echo.
echo coping...
MD C:\SAM\%DATE%
copy %WINPATCH%\System32\Config\SAM C:\SAM\%DATE%\SAM
copy %WINPATCH%\System32\Config\SYSTEM C:\SAM\%DATE%\SYSTEM
GoTo end

:end
echo.
echo Operation competed sucsessful.
pause
exit
Автор: Maikl_relax
Дата сообщения: 01.02.2010 11:32
Kirillhome
"Судя по эху - у тебя выводится весь список."
Да верно- структура пербирется

"В чём заковыка то?"
Директории не удалаются и их сождержимое- Предмет работы требуемого скрипта )))

Я же чуть выше в этом же посте все подробно описал и потом привел эхо на всяк случай:

Сносится только папка
F:\NETSHATRE\1\NEW_STRU

а мне надо
F:\NETSHATRE\1\1\NEW_STRU
F:\NETSHATRE\1\2\NEW_STRU
F:\NETSHATRE\1\3\NEW_STRU
и т.д.
F:\NETSHATRE\1\N\NEW_STRU

а так же ....

wolf0425
Глянь плиз тоже, исходник то не рабоатет в итоге
http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=60#15
Автор: wolf0425
Дата сообщения: 01.02.2010 11:41

Цитата:
"Судя по эху - у тебя выводится весь список."
Да верно- структура пербирется
Ну, и чего хочешь - чтобы тебе объяснили, как выданную тебе в примере команду печати этих найденных элементов структуры (echo "%%~fa") заменить на команду удаления каталога, сам это сделать совершенно не мог?


Код: for /f "delims=" %%a in (' dir /b/s/a:d "F:\NETSHATRE\1\*NEW_STRU" ') do if /i "%%~nxa" EQU "NEW_STRU" rd /s /q "%%~fa"
Автор: Kirillhome
Дата сообщения: 01.02.2010 13:20
Maikl_relax
Смотри - воп пример, который делает папки и подпапки, а потом их уничтожает.


Код: @echo off
set "ISK_DIR=NEW_STRU"
set "TMP_DIR=NO_NEW_STRU"
set "TEK_PATH=%~dp0"
MD %ISK_DIR% 2>null
MD %TMP_DIR% 2>null
FOR /L %%i in (1,1,9) DO (
MD %%i\%ISK_DIR% 2>null
MD %%i\%TMP_DIR% 2>null
FOR /L %%j in (1,1,9) DO (
MD %%i\%%j\%ISK_DIR% 2>null
MD %%i\%%j\%TMP_DIR% 2>null))

echo ===before===> all_dir.txt
dir /b /S /a:d>> all_dir.txt
echo ============>>all_dir.txt
for /f "delims=" %%a in (' dir /b/s/a:d "%TEK_PATH%*%ISK_DIR%" ') do if /i "%%~nxa" EQU "%ISK_DIR%" rd /s /q "%%~fa"
echo ===after===>>all_dir.txt
dir /b /S /a:d>>all_dir.txt
echo ============>>all_dir.txt
Автор: Maikl_relax
Дата сообщения: 01.02.2010 13:25
wolf0425
Полностью со всем согласен =)
Подправил.

Kirillhome
wolf0425
Спасибо! Работает!! Респект =)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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