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

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

Автор: Elroir
Дата сообщения: 30.11.2007 19:05
01MDM

Извини - глаза режет:

Цитата:
Choice a file

Choice - это существительное "выбор". Тут надо "Choose a file" использовать.
Автор: 01MDM
Дата сообщения: 30.11.2007 19:28
Elroir
Исправил, крутилось take а choice. Спасибо за замечание.
Автор: Vladimir312
Дата сообщения: 01.12.2007 16:55

Код: for /d %%i in ("%%~si") do (
set SHORT=%%~si
)
echo %SHORT%
Автор: Elroir
Дата сообщения: 01.12.2007 17:35
Vladimir312

Цитата:
выводит короткий путь + имя самой переменной,
интересно, как убрать вывод %~si

Что ты пытаешься сделать? Короткий путь к чему? Что должно быть в переменной?
Автор: Vladimir312
Дата сообщения: 01.12.2007 19:04
> Что ты пытаешься сделать?
> Короткий путь к чему?
Вывод короткого пути к каталогу (для robocopy /Mx),
в каталогах, содержащих пробелы и имена каталогов на кириллице.
Результат: E:\Video\ORIGIN\DVDCOM~1\VIDEO_TS\%~si
Но в конце строки выдается имя переменной. (как избавиться?)

> Что должно быть в переменной?
E:\Video\ORIGIN\DVDCOM~1\VIDEO_TS\
Автор: king_stiven
Дата сообщения: 01.12.2007 19:57
Vladimir312
Пусть путь E:\Video\ORIGIN\DVDCOM df\VIDEO_TS\

for /f "tokens=*" %%i in ("E:\Video\ORIGIN\DVDCOM df\VIDEO_TS") do set SHORT=%%~sfi
echo %SHORT%

Автор: tommak
Дата сообщения: 03.12.2007 10:10
Как найти заданый каталог, имя которого задётся как параметр? Нужна помощь)
Автор: 01MDM
Дата сообщения: 03.12.2007 10:38
tommak

Код:
@echo off
for %%i 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 (
dir /b /s /a:d %%i:\ 2>nul | findstr "%*"
)
Автор: xitsa
Дата сообщения: 03.12.2007 10:50
Как можно удалить все файлы из каталога и всех подкаталогов, кроме файлов из скрытых каталогов?
Подробнее:

Код:
Root\
Subdir1\
H backup\ <-- скрытый
Subdir1\ <-- не скрытый
Subdir2\ <-- не скрытый
Subdir1\
Subdir2\
Subdir2\
H backup\ <-- скрытый
Subdir1\ <-- не скрытый
Subdir2\ <-- не скрытый
Subdir1\
Subdir2\
Автор: tommak
Дата сообщения: 03.12.2007 10:54
Ой прошу прощения... Его надо удалить ... МОжно поправить я в пакетных не оч ...
Автор: 01MDM
Дата сообщения: 03.12.2007 11:27
tommak
В общем на страх и риск, что будут удалены папки с похожими названиями, Осторожно!

Код:
@echo off
for %%i 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 (
    for /f "tokens=*" %%j in ('dir /b /s /a:d %%i:\ 2^>nul ^| findstr "\<%*\>"') do (
        echo "%%j"
rem rd /s /q "%%j"
)
)
Автор: xitsa
Дата сообщения: 03.12.2007 13:25
01MDM
Спасибо большое, впервые вижу вызов внутрь самого батника, тем более с параметрами

Код: call:inDelete "%%i"
Автор: Estevan
Дата сообщения: 03.12.2007 14:05

Цитата:
Dieselman

Цитата:
1. На диске A надо скрыть файлы(ATTRIB +h) созданые после определённой даты(например 01.01.2000),дата задаётся с клавиатуры.


Другая твоя задача идеально решается при помощи утилиты Forfiles Скачай ее и кинь в папку %windir%\system32

Сам батник прост:

Код:
@echo off
set date=%1
forfiles -pa:\ -s -d+%date% -c"CMD /C attrib +h @FILE"


Батник запускается с параметром - датой. Формат даты ddmmyyyy Например 01012000


Ребята появилась нужда в таком же батнике,но нужна реализация без всяких утилит,а стандартными средствами.Буду очень благодарен.
Автор: xitsa
Дата сообщения: 03.12.2007 14:17
01MDM
Протестировал батник более тщательно, удаляет файлы в нескрытых подкаталогах скрытых каталогов.
Но благодаря твоей наводке составил такой вариант, каталог указывается параметром:

Код:
@echo off
rem %1 Получает на вход имя Root
:inDelete
echo Deleting files in %1
pushd %1
del /q "*"
for /f "tokens=*" %%i in ('dir /b /a:-hd "*"') do (
call:inDelete %%i
)
popd
Автор: SapSat
Дата сообщения: 03.12.2007 15:05
xitsa

Цитата:
Никогда не думал, что в батнике возможна рекурсия


Да, прикольно...

Теперь давайте факториал на рекурсии реализуем в батнике.

У кого есть идеи?

?
Автор: Tipulatoid
Дата сообщения: 03.12.2007 15:36
SapSat

Цитата:
Теперь давайте факториал на рекурсии реализуем в батнике.

Тут и далее по топику вопрос с факториалом разжеван Elroir до костей
Автор: 01MDM
Дата сообщения: 03.12.2007 15:38
Estevan

Попробуй вариант. Если файлы другого года, то возможны ошибки.

Код:
@echo off

set /p dayAge="Enter Date (01.01.2007): "

set checkdate=%date%
call:isDate
set this=%yd%

for /f "tokens=*" %%i in ('dir /b /s /a-d %1') do (
    set checkdate=%%~ti
    call:isDate
    call:findtoHide "%%~dpnxi"
)
goto:eof

:isDate
for /f "tokens=1-3 delims=." %%i in ("%checkdate:~0,10%") do (
    set year=%%k
    set /a lyear=%%k%%4
    set month=%%j
    set day=%%i
)

if %lyear% equ 0 (
    echo 01 02 | findstr %month% >nul 2>&1 || set ld=1
)

if %day:~0,1% equ 0 set day=%day:~-1%
if %month% equ 12 set /a yd=day+ld+334
if %month% equ 11 set /a yd=day+ld+304
if %month% equ 10 set /a yd=day+ld+273
if %month% equ 09 set /a yd=day+ld+243
if %month% equ 08 set /a yd=day+ld+212
if %month% equ 07 set /a yd=day+ld+181
if %month% equ 06 set /a yd=day+ld+151
if %month% equ 05 set /a yd=day+ld+120
if %month% equ 04 set /a yd=day+ld+90
if %month% equ 03 set /a yd=day+ld+59
if %month% equ 02 set /a yd=day+31
if %month% equ 01 set /a yd=day
goto:eof

:findtoHide
set /a toHide=this-yd
if %toHide% leq %dayAge% echo %1
:: if %toHie% leq %dayAge% attrib +h %1
Автор: kotLeon
Дата сообщения: 03.12.2007 18:53
Всем доброго времени суток есть у меня проблемка такого рода: существует локальная сеть и мне нужен такой батник с помощью которого можно было пропинговать компы (работает комп или нет) с последующим условием к примеру если комп работает то выведет сообщение что он работает и наоборот. Примного благодарен за любую помощь, заранее извеняюсь за свою неграмотрость в данном вопросе.
Спасибо.
Автор: MegaSin
Дата сообщения: 03.12.2007 20:09
Доброго времени суток.
Появилась проблема в модификации своего-же скрипта
кусок кода:

Код: @ECHO OFF&cls
set mangos=127.0.0.1;3306;user;;mangos
set realmd=127.0.0.1;3306;user;pass;realmd
set chars=127.0.0.1;3306;user1;pass;chars

setlocal ENABLEDELAYEDEXPANSION enableextensions
for %%a in (mangos realmd chars) do (
    set basecfg=!%%a!&set basecfg=!basecfg:;;=;getpass;!&set basecfg=!basecfg:;=/!
    set param=%%a&set param=!param:~0,1!
    for /f "tokens=1-5 delims=/" %%i in ('echo !basecfg!') do (
        if "%%l"=="getpass" (set pass=)else set pass= -p%%l
         set !param!server=xz -h %%i -P%%j -u%%k!pass!
         set !param!scheck=xz -h %%i -P%%j -u%%k!pass!
         set !param!sdump=xz -h %%i -P%%j -u%%k!pass! %%m
    )
)
endlocal
Автор: 01MDM
Дата сообщения: 03.12.2007 20:58
MegaSin
А если убрать endlocal? Если дальше есть продолжение? Setlocal - endlocal определяют область действия локальных переменных.
Автор: MegaSin
Дата сообщения: 03.12.2007 21:02
01MDM
скрипт 2100 строк.... и где то нужен setlocal, где то нет... дальше этого куска кода строчек 500 наверно. это кусочек функции загрузки конфига
в мануале написано следующее:

Цитата:
Начало локализации изменений среды в пакетном файле. Изменения среды, внесенные после выполнения команды SETLOCAL, являются локальными относительно текущего пакетного файла. Для восстановления их прежних значений необходимо выполнить команду ENDLOCAL.

не пойму я что то....
Автор: 01MDM
Дата сообщения: 03.12.2007 21:33
MegaSin
Сложно чем-то помочь, используй goto и call

Код:
@echo off
set a=a

setlocal
set b=b

echo %a% in
echo %b% in

call:next
goto:next

endlocal

:next
echo %a% in next
echo %b% in next
Автор: Vladimir312
Дата сообщения: 03.12.2007 21:42
king_stiven

Цитата:
Vladimir312
Пусть путь E:\Video\ORIGIN\DVDCOM df\VIDEO_TS\

for /f "tokens=*" %%i in ("E:\Video\ORIGIN\DVDCOM df\VIDEO_TS") do set SHORT=%%~sfi
echo %SHORT%

Пардон, но ваш вариант выводить короткий путь не хочет

E:\Video\ORIGIN\DVDCOM df\VIDEO_TS

p.s.
А задавать полный путь каждый раз "вручную" ... не есть хорошо.

рабочий вариант:

Код: for /d %%i in ("%%~si") do (
set SHORT=%%~si
)
echo %SHORT%
Автор: king_stiven
Дата сообщения: 03.12.2007 21:52
Estevan

Код: @echo off
chcp 1251 > nul
set /p data=введите год месяц число
for /f "usebackq tokens=1,2,3*" %%b in (`dir "A:\*.*" /t:c /s /a:-d`) do (
if %%b%%c==Содержимоепапки set "folder=%%d %%e"
for /f "tokens=1,2,3 delims=." %%f in ("%%b") do (
if %%h%%g%%f GEQ %data% (
set "file=%%e"
call :end
)
)
)
goto :eof
:end
attrib +h "%folder%\%file%" > nul
Автор: MegaSin
Дата сообщения: 03.12.2007 21:54
01MDM
уважаемый, вы гений!!!

Код: @ECHO OFF&cls
set mangos=127.0.0.1;3306;user;;mangos
set realmd=127.0.0.1;3306;user;pass;realmd
set chars=127.0.0.1;3306;user1;pass;chars

setlocal ENABLEDELAYEDEXPANSION
for %%a in (mangos realmd chars) do (
    set basecfg=!%%a!&set basecfg=!basecfg:;;=;getpass;!&set basecfg=!basecfg:;=/!
    set param=%%a&set param=!param:~0,1!
    for /f "tokens=1-5 delims=/" %%i in ('echo !basecfg!') do (
        if "%%l"=="getpass" (set pass=)else set pass= -p%%l
         set !param!server=xz -h %%i -P%%j -u%%k!pass!
         set !param!scheck=xz -h %%i -P%%j -u%%k!pass!
         set !param!sdump=xz -h %%i -P%%j -u%%k!pass! %%m
    )
)
goto :next
endlocal

:next
echo mserver = %mserver%
echo rserver = %rserver%
echo cserver = %cserver%
Автор: 01MDM
Дата сообщения: 03.12.2007 22:11
Vladimir312
Путь сокращается только если он реально существует...
Автор: Elroir
Дата сообщения: 04.12.2007 00:36
Vladimir312
Чтобы определить каталог запуска батника (плюс вывести его короткий путь), вовсе не надо использовать for.
Можно так:

Код:
echo %~dps0
Автор: SapSat
Дата сообщения: 04.12.2007 08:45

Цитата:

SapSat

Цитата: Теперь давайте факториал на рекурсии реализуем в батнике.


Тут и далее по топику вопрос с факториалом разжеван Elroir до костей
Автор: king_stiven
Дата сообщения: 04.12.2007 09:03
Estevan
Самый быстрый вариант

@echo off
chcp 1251 > nul
set /p data=Enter year month number
for /r A:\ %%a in (.) do (
set "d=%%a"
call :yui
)
goto :eof
:yui
for /f "skip=5 usebackq tokens=1,2,3,5* delims=., " %%c in (`dir "%d%\*.*" /t:c /o:-d /a:-d`) do (
if %%e%%d%%c GTR %data% (
attrib +h "%%a\%%g" > nul
) else (
goto hj
)
)
:hj
Автор: 01MDM
Дата сообщения: 04.12.2007 09:06
SapSat
Факториал

Код:
@echo off
set /p fact="Factorial: "
set /a fact-=1
set res=1
for /l %%i in (0,1,%fact%) do set /a res*=%%i+1
echo %res%

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

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


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