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

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

Автор: getname
Дата сообщения: 17.02.2008 22:17
Спасибо...

Первое что сразу хотелось бы уточнить это локаль...
что делает _setlocal_ и можна ли после этого утверждать что
set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%
отработает корректно вне зависимосссти от формата системной даты?
Автор: 01MDM
Дата сообщения: 17.02.2008 22:34
getname
Setlocal для возможности использования скрипта несколько раз в одной сессии. Эта команда ограничивает область действия переменных.
Cкрипт будет работать неправильно если формат даты будет отличаться от шаблона

Код:
дд*мм*гггг
Автор: cluster
Дата сообщения: 18.02.2008 14:08
Есть ли способ установить шрифт из командной строки?
Нашёл такой вот, но он требует перезагрузки

Код: copy akbar.ttf %systemroot%\fonts

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
"Akbar Plain (TrueType)"="akbar.ttf"
Автор: igor_andreev
Дата сообщения: 18.02.2008 15:27
cluster
http://www.scriptorium.se/freeyourdesktop/viewtopic.php?pid=195
http://forum.oszone.net/thread-92136.html
http://www.msfn.org/board/index.php?s=&showtopic=36508&view=findpost&p=265420
Автор: AS2007
Дата сообщения: 18.02.2008 16:26
Здесь на форуме нашел код батничка, который сканирует папки и делает плэйлист к мп3 файлам. Я немного переделал для создания списка фильмов в папке, из которой запускается батник, и всех подпапках... Но очень хотелось бы некоторые папки не учитывать. В данном примере не учитывается папка HIDDEN_FOLDER - идентифицируется по названию.
Собственно вопрос - как бы переделать код, чтоб не учитывались скрытые папки (атрибут папки - скрытый) т.е. чтоб фильмы из скрытой папки не попадали в общий список, а например сохранялись бы в другой файл (например HIDDEN_%flname%)

Код: @echo off
mode con codepage select=1251 > nul
REM set flname=""
REM if "%flname%"=="" set /p flname=Enter file name:
REM if "%flname%"=="" set flname=_List_"%DATE%".txt
@set flname=_List_"%DATE%".txt
@echo Please wait...
@if exist %flname% del %flname%
@set ind=0
:next
@set /a ind+=1
@set tmp=
@for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a
@if not "%tmp%"=="" goto next
@set /a ind-=1
for /f "delims=\ tokens=%ind%*" %%a in ('dir /s') do (
if "%%b"=="" (
echo ##### Корневая папка: %%a >> %flname%
dir "*.avi" "*.wmv" /b >> %flname%
echo. >> %flname%
) else if not "%%b"=="HIDDEN_FOLDER" (
echo ##### Содержимое папки: %%b >> %flname%
dir "%%b\*.avi" "%%b\*.wmv"/b >> %flname%
echo. >> %flname%
)
)
@mode con codepage select=866 > nul
@if exist %flname% start %flname%
Автор: king_stiven
Дата сообщения: 18.02.2008 18:23
AS2007

Код: @echo off
mode con codepage select=1251 > nul
REM set flname=""
REM if "%flname%"=="" set /p flname=Enter file name:
REM if "%flname%"=="" set flname=_List_"%DATE%".txt
@set flname=_List_"%DATE%".txt
@echo Please wait...
@if exist %flname% del %flname%
@set ind=0
:next
@set /a ind+=1
@set tmp=
@for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a
@if not "%tmp%"=="" goto next
@set /a ind-=1
for /f "delims=\ tokens=%ind%*" %%a in ('dir /s') do if not "%%b"=="" echo %%b>> 1.txt
Автор: AS2007
Дата сообщения: 19.02.2008 02:34
king_stiven

Цитата:
Что выдаёт в 1.txt, список папок?


Да, вот примерно так:

HIDDEN_FOLDER - Эта папка имеет скрытый атрибут
FOLDER1
FOLDER2
FOLDER2\SUBFOLDER1
FOLDER2\SUBFOLDER2
FOLDER3

Вопрос был не в том как вывести список папок, а как "разделить" файлы из скрытых и не скрытых каталогов и вывести их в разные файлы....
Автор: king_stiven
Дата сообщения: 19.02.2008 06:01
AS2007
Понимаешь у меня сейчас нет времени разобраться в твоём и написать сразу на 100% работающий батник, поэтому двигаемся поэтапно. Я так понял, что мой вариант выдаёт полный список папок, которые остаётся только отсортировать по скрытности. Это так?
Автор: qrock
Дата сообщения: 19.02.2008 06:09
Товарищи подскажите пож-та как получить номер дня недели в батнике?
Автор: cluster
Дата сообщения: 19.02.2008 08:17
qrock
Оо, я бился над этой проблемой в январе. Читай пару страниц.
http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=1320#19

Добавлено:
igor_andreev
Благодарю
Автор: 01MDM
Дата сообщения: 19.02.2008 08:19
qrock
Поищи в Версии для печати по ключевым словам. Обсуждалось много раз.
Автор: king_stiven
Дата сообщения: 19.02.2008 12:43
AS2007

Код: @echo off
mode con codepage select=1251 > nul
REM set flname=""
REM if "%flname%"=="" set /p flname=Enter file name:
REM if "%flname%"=="" set flname=_List_"%DATE%".txt
@set flname=_List_"%DATE%".txt
@echo Please wait...
@if exist %flname% del %flname%
@set ind=0
:next
@set /a ind+=1
@set tmp=
@for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a
@if not "%tmp%"=="" goto next
@set /a ind-=1
for /f "delims=\ tokens=%ind%*" %%a in ('dir /s') do (
if "%%b"=="" (
echo ##### Корневая папка: %%a >> %flname%
dir "*.avi" "*.wmv" /b >> %flname%
echo. >> %flname%
) else (
for /f "tokens=1,2" %%c in ('attrib "%%b"') do (
if "%%c"=="H" set HIDDEN=yes
if "%%d"=="H" set HIDDEN=yes
if "%%c"=="HR" set HIDDEN=yes
if "%%d"=="HR" set HIDDEN=yes
)
if not defined HIDDEN (
echo ##### Содержимое папки: %%b >> %flname%
dir "%%b\*.avi" "%%b\*.wmv"/b >> %flname%
echo. >> %flname%
) else (
ну а сюда пиши , что хочешь сделать с скрытыми папками, выраженными через переменную %%b
set HIDDEN=
)
)
)
@mode con codepage select=866 > nul
@if exist %flname% start %flname%
Автор: AS2007
Дата сообщения: 19.02.2008 14:03
king_stiven

Цитата:
Я так понял, что мой вариант выдаёт полный список папок, которые остаётся только отсортировать по скрытности. Это так?

Да, абсолютно так.
king_stiven
Спасибо, сейчас попробую... разобраться.

Цитата:
Вариант, что скрытая папка является и системной не рассмотрен

Ну по идеи он и не нужен.... достаточно H

Добавлено:
king_stiven
Еще раз большое спасибо... Немного подправил и все супер, работает как нужно.
Автор: MaCeL
Дата сообщения: 19.02.2008 15:03
Здравствуйте. Сталкнулся с такой проблемой. Имеется переменная окружения, содержащая полный путь к некоторой папке. Необходимо в батнике проверить следущее, если значение переменной заканчивается слэшом, то удалить этот слэш. Может кто подскажет как это можно реализовать или как получить доступ к отдельному символу строки. Заранее благодарю.
Автор: Joolz
Дата сообщения: 19.02.2008 15:17
При включении setlocal enabledelayedexpansion
как-либо экранировать символ восклицательного знака не получается. Можно ли это как-то обойти?

Добавлено:
MaCeL
Что-то типа того:

Код: IF "%PATH:~-1%"=="\" SET PATH=%PATH:~0,-1%
Автор: 01MDM
Дата сообщения: 19.02.2008 15:35
Joolz
Приведи пример. Проблема решается, но в констексте конкретного кода.
Из общих рекомендаций, мое мнение - лучше избегать setlocal enabledelayedexpansion если код связан с выводом текста.
Автор: Joolz
Дата сообщения: 19.02.2008 16:22
01MDM

Код:
@ECHO OFF
REM Этот BAT'ничек лезет в ветку реестра и составляет список установленных программ и кладет его в файл на шару.
Title Вывод списка установленных программ
setlocal enabledelayedexpansion
ECHO Составляю список установленного ПО. Ждите...
ECHO ╤яшёюъ ╧╬ эр ъюья№■ЄхЁх %computername%:>\\COMP\Share\%computername%UN2.txt
SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
    SET prog=%%a
    FOR /f "tokens=1,2,*" %%b IN ('reg query "%UNISTALL%\%%a"') DO (
    if "%%b"=="DisplayName" SET prog1=%%d)
    FOR /f "tokens=1,2,*" %%x IN ('reg query "%UNISTALL%\%%a"') DO (
    if "%%x"=="UninstallString" SET ustr=%%z)
IF NOT "!ustr!"=="" ECHO !prog1!    !prog!    !ustr!>>\\COMP\Share\%computername%UN2.txt
set prog=
set prog1=
set ustr=
)
ECHO Спасибо
Автор: 01MDM
Дата сообщения: 19.02.2008 18:45
Joolz
Вот что получилось, у меня вроде выводит все значения "DisplayName" и "UninstallString" если они есть.

Код:
@echo off
setlocal
chcp 1251 1>nul

set rpath=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
for /f "tokens=*" %%a in ('reg query %rpath% ^| findstr "HKEY"') do (
for /f "tokens=3*" %%b in ('reg query "%%a" ^| findstr "\<DisplayName\>"') do (
set "program=%%b %%c")
for /f "tokens=3*" %%b in ('reg query "%%a" ^| findstr "\<UninstallString\>"') do (
set "uninstall=%%b %%c")
call:write "%%a"
)
chcp 866 1>nul
goto:eof
:write
set uninstall=%uninstall:"=%
echo RegPath: %~1 1>>uninst.txt
echo Program: %program% 1>>uninst.txt
echo Uninstall: %uninstall% 1>>uninst.txt
echo --------------------------------------------------------------------------- 1>>uninst.txt
set program=
set uninstall=
Автор: getname
Дата сообщения: 19.02.2008 18:52
01MDM
сидел разбирал программу ну так ничего и не понял;( добавь пожалуйста комменты...
Автор: 01MDM
Дата сообщения: 19.02.2008 19:04
getname
Извини, но получится на целую страницу.. Главное что бы работала.
Автор: getname
Дата сообщения: 19.02.2008 19:24
хорошо, где можно почитать про батники(если я до этого ни интерпретаторами ни бейсика подобными языками не пользовался)?
Автор: 01MDM
Дата сообщения: 19.02.2008 20:05
getname
Вся информация в основном из справки %WINDIR%\Help\ntcmds.chm и от сюда.
Автор: getname
Дата сообщения: 19.02.2008 20:28
01MDM
cпасибо, буду читать...
Автор: clio77
Дата сообщения: 19.02.2008 20:33
Возможно ли реализовать батником такую задачу.
1) Копировать по два файла из 4х расшареных сетевых папок.
2) Архивировать их в общий RAR архив
3) отправить архив по FTP
Автор: Joolz
Дата сообщения: 20.02.2008 08:31
01MDM
TanX!
Можно уточнить? Возможно вопрос ламерский, но до сих пор не сталкивался...
В случае echo RegPath: %~1 1>>uninst.txt выводится фактически переменная %%a?
И зачем 1 перед >>.
Автор: 01MDM
Дата сообщения: 20.02.2008 10:41
Joolz

Цитата:
В случае echo RegPath: %~1 1>>uninst.txt выводится фактически переменная %%a?

Да, переменная %%a - название ключа реестра.

Цитата:
И зачем 1 перед >>

В общем необязательно. Это скорее для себя. Мне так удобней.


Автор: returt
Дата сообщения: 20.02.2008 13:05
Помогите перенаправить результат команды в переменную. Как это сделать?
Автор: sergdf
Дата сообщения: 20.02.2008 14:30
Помогите сделать следующую вещь:
есть файл с расширением mp3, так вот нужно запустить его через bat-файл, причем чтобы он запустился не в программе по умолчанию (Winamp), а через другую (которую укажу я)...
Можно ли вообще сделать такое?
Автор: 01MDM
Дата сообщения: 20.02.2008 15:02
returt

Код:
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
Автор: king_stiven
Дата сообщения: 20.02.2008 15:04
sergdf
1 вариант назначить эту программу по умолчанию для воспроизведения mp3

2 вариант если у программы есть поддержка командной линии, запустить с соответствующими ключами

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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