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

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

Автор: ZidanCo
Дата сообщения: 03.12.2009 19:55
Хмм , пишет файл не найден... какой файл? Насоздовал различных файлов , он не удалил ниодин , обьясните пожалуйсто как скрипт должен работать
Автор: mugil_cephalus
Дата сообщения: 03.12.2009 20:01
01MDM
значит, если у меня батник с аргументом daily (например) то мне в синтаксисе дефис не прибавлять.
выбрать этот вариант -
Цитата:
Код:hstart /NOCONSOLE "c:\file.bat arg1 arg2 arg3"

в частном случае так
Код: hstart /NOCONSOLE "c:\file.bat daily"
Автор: ZidanCo
Дата сообщения: 03.12.2009 20:38
Тоже самое ...
Автор: mugil_cephalus
Дата сообщения: 03.12.2009 20:43
ZidanCo

Цитата:
обьясните пожалуйсто как скрипт должен работать

удали строчку @echo off и запусти батник из консоли и увидишь листинг, как он отрабатывает

Добавлено:
ZidanCo
у меня все *.bat-файлы удалил
вот листинг
W:\>remover.bat

W:\>if "_" NEQ "_" goto:arg1

W:\>for /F "tokens=* delims=" %i in ('dir /b /o:n w:\folder') do call:_1 "%i" & goto:restart

W:\>call:_1 "aaa.bat" & goto:restart

W:\>set "name=aaa.bat"

W:\>goto:eof

W:\>cmd /c remover.bat "aaa.bat"

W:\>if "_"aaa.bat"" NEQ "_" goto:arg1

W:\>set "ext=.bat"

W:\>del /q w:\folder\*.bat

W:\>goto:eof

W:\>

p.s.
можно еще в строке
if "_%1" neq "_" goto:arg1 поменять на if "_%~1" neq "_" goto:arg1

если есть имена на кириллице - то chcp 1251
Автор: ZidanCo
Дата сообщения: 03.12.2009 21:00
На моменте
C:\Users\Администратор>for /F "tokens=* delims=" %i in ('dir /b /o:n "pathtofold
er"') do call:_1 "%i" & goto:restart
Файл не найден

Добавлено:
А не слишком ли сложная реализация , для задания на втором курсе колледжа?
Думалось будет по проще , тут для меня мало что понятно к сожалению

Добавлено:
Все разобрался , действительно - удаляет все файлы с тем же расширением , что и первый файл в папке
Большое спасибо


Добавлено:
Хмм , если просто запустить bat файл , то он ничего не сделает , удаляет только если запускаю через cmd с указанием пути к файлу. Не знаете как исправить?
Автор: mugil_cephalus
Дата сообщения: 03.12.2009 21:37
ZidanCo

Цитата:
Хмм , если просто запустить bat файл , то он ничего не сделает , удаляет только если запускаю через cmd с указанием пути к файлу. Не знаете как исправить?


попробуй "мышиный" вариант

Код: if "_%~1" neq "_" goto:arg1
for /f "tokens=* delims=" %%i in ('dir /b /o:n w:\folder') do call:_1 "%%i" & goto:restart

:_1
set "name=%~1"
goto:eof

:arg1
set "ext=%~x1"
del /q w:\folder\*%ext%
goto:eof

:restart
cmd /c %~0 "%name%"
Автор: 01MDM
Дата сообщения: 03.12.2009 21:40
ZidanCo

Цитата:
А не слишком ли сложная реализация , для задания на втором курсе колледжа?

Да уж накрутили:

Код:
@echo off
for /f "tokens=*" %%i in ('dir /b test') do del test\*%%~xi && goto:eof
Автор: mugil_cephalus
Дата сообщения: 03.12.2009 21:51
01MDM

Цитата:
Да уж накрутили:



забыл про modifiers в переменных итератора
Автор: Ortios
Дата сообщения: 03.12.2009 22:10
SANIOK_AV

Цитата:
нужно из каталога C:\1\ скопировать в каталог C:\2\ подкаталог, который самый свежий по дате создания...


Код: @echo off
set count=0
set "destination=D:\2\"
set "source=D:\1\"
pushd %source%
for /D %%a in (%source%*) do set /a count+=1
set /a count-=1
for /f "skip=%count% tokens=*" %%i in ('dir /a:D /o:D /b') do call copy "%%i"
popd
goto :eof

copy
set young=%1
xcopy %source%%young% %destination%%young%\ /Y
exit /b
:eof
Автор: king_stiven
Дата сообщения: 04.12.2009 08:39
SANIOK_AV

Код: @echo off
for /f "tokens=*" %%i in ('dir C:\1 /a:D /o:-D /T:c /S /b') do (
xcopy "%%i" C:\2\1 /s /e /r /h /Y /i
goto :eof
)
Автор: Tase4ka
Дата сообщения: 04.12.2009 09:04
Помогите плиз. Я весь мозг уже сломала.
Задача такова: нужно прочитать все текстовые файлы и сравнить у них дату создания с текущей датой, если они равны то скопировать файл в другую папку. Делаю это по следующему коду на основании прочтенных топиков в форумах, но у меня не работает

@Echo Off
setlocal enabledelayedexpansion
FOR %%1 IN (D:\test\*.txt) DO (
set tmpd=%~t1 >>15.log
set tmpd=!tmpd:~0,13! >>15.log

IF "!tmpd!" == %DATE% (
set ntmp=%~n1
copy /Y D:\test\%ntmp% C:\%ntmp% >>15.log
)
)


Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции
Автор: drksrv
Дата сообщения: 04.12.2009 09:23
Ну может всё таки кто то подскажет мне по моему вопросу 2 страницы назад ?
>>
Вопрос вот какой:

Код: @echo off
cls
echo Protecting srcds from crashes...
title srcds Watchdog
:srcds
echo (%time%) srcds started.
start /wait srcds.exe
echo (%time%) WARNING: srcds closed or crashed, restarting....
goto srcds
Автор: king_stiven
Дата сообщения: 04.12.2009 09:30

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

При этом в диспеичере задач процесс srcds.exe есть или нет?

Добавлено:
Tase4ka
В шапке через vbs
Автор: GORA2
Дата сообщения: 04.12.2009 09:37
Tase4ka
Попробуйте так:
Код: @Echo Off
setlocal enabledelayedexpansion
Set dt=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
FOR %%a IN (D:\test\*.txt) DO (
    set tmpd=%%~ta
    set tmpd=!tmpd:~6,4!!tmpd:~3,2!!tmpd:~0,2!
    IF !tmpd!==%dt% copy /Y D:\test\%%~na C:\%%~na
)
Pause>nul
Автор: king_stiven
Дата сообщения: 04.12.2009 09:39
drksrv
попробуй. не уверен

Код: @echo off
cls
echo Protecting srcds from crashes...
title srcds Watchdog
:srcds
echo (%time%) srcds started.
srcds.exe
echo (%time%) WARNING: srcds closed or crashed, restarting....
goto srcds
Автор: mugil_cephalus
Дата сообщения: 04.12.2009 09:43
Tase4ka


Цитата:
Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции

EQU попробуйте
Автор: Tase4ka
Дата сообщения: 04.12.2009 10:10
GORA2


Цитата:
Tase4ka
Попробуйте так:
Код:
@Echo Off
setlocal enabledelayedexpansion
Set dt=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
FOR %%a IN (D:\test\*.txt) DO (
set tmpd=%%~ta
set tmpd=!tmpd:~6,4!!tmpd:~3,2!!tmpd:~0,2!
IF !tmpd!==%dt% copy /Y D:\test\%%~na C:\%%~na
)
Pause>nul



Так копирует всё содержимое каталога
Автор: GORA2
Дата сообщения: 04.12.2009 10:19
Tase4ka

Цитата:
Так копирует всё содержимое каталога

Локаль русская? Что значить "всё содержимое"? И не .txt файлы тоже? И .txt файлы с более старыми датами?

ps исправьте эту строку:
Код: IF !tmpd!==%dt% copy /Y D:\test\%%~nxa C:\%%~nxa
Автор: Tase4ka
Дата сообщения: 04.12.2009 10:33
GORA2

УУУУУУРРРРРРРАААААААААА


вот так сработало:


@Echo Off
setlocal enabledelayedexpansion
Set dt=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
FOR %%a IN (W:\*.txt) DO (
set tmpd=%%~ta
set tmpd=!tmpd:~6,4!!tmpd:~3,2!!tmpd:~0,2!
IF !tmpd!==%dt% copy /Y W:\%%~nxa C:\%%~nxa
)
Pause>nul


Спасибо огроменное! Могу теперь с чистой совестью и чувством изполненного долга идти обедать
Автор: 192168
Дата сообщения: 04.12.2009 10:44
GORA2

Спасибо.
Проблема была в пробелах до и после знака присвоения; "даже самый неправильный код должен выглядеть изящно" (с).
Автор: wolf0425
Дата сообщения: 04.12.2009 11:17

Цитата:
Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции
читаем if /? и видим что действительно нет, есть equ

Цитата:
Делаю это по следующему коду на основании прочтенных топиков в форумах, но у меня не работает
set tmpd=%~t1 >>15.log
set tmpd=!tmpd:~0,13! >>15.log
это ж где такой пример был? для >> 15.log в смысле. так делать и бессмысленно и без понимания даже вредно - у тебя вот пробел лишний в переменную влез, засада для if

Цитата:
IF "!tmpd!" == %DATE% (
set ntmp=%~n1
copy /Y D:\test\%ntmp% C:\%ntmp% >>15.log
)
ну что за... везде в цикле писала !tmpd!, а тут, в том же цикле - %ntmp% для свежеопределенной переменной, и еще хочешь чтоб работало
Кстати, а чему равен используемый строчкой выше %1 ? или там второй % потерялся (и в %~t1 - тоже), а счетчик цикла выбран такой специально для запутывания?

в общем, написать ты хотела видимо вот это:

Код: @echo off
setlocal enabledelayedexpansion
for %%i in (W:\*.txt) do (
    set tmpd=%%~ti
    if "!tmpd:~0,10!" equ "%date%" echo %%i & copy /y "%%~fi" c:\kuda_nado\ 1>nul
)
Автор: Craager
Дата сообщения: 04.12.2009 11:35
Привет всем, подскажите скрипт или батник для несложной операции, а именно:

Есть обновляемая каждый день папка (назовём её "X") и требуется батник, который будет делать резервную копию (backup) всех файлов и папок из папки "X" в условную папку "Y".

Как это можно реализовать ?
Автор: mugil_cephalus
Дата сообщения: 04.12.2009 11:43
wolf0425

Цитата:
Цитата:Пришлось использовать в условии "==", так как на EQL ругается, что нет такой функции

читаем if /? и видим что действительно нет, есть equ


ах, если бы...

if /?

Изменение команды IF при включении расширенной обработки команд:

IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда

где оператор_сравнения принимает следующие значения:

EQL - равно
NEQ - не равно
LSS - меньше
LEQ - меньше или равно
GTR - больше
GEQ - больше или равно

а ключ /I, если он указан, задает сравнение текстовых строк без учета
регистра. Ключ /I можно также использовать и в форме строка1==строка2
команды IF. Сравнения проводятся по общему типу данных, так что если
строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа,
после чего выполняется сравнение чисел.
Автор: Tase4ka
Дата сообщения: 04.12.2009 12:02
mugil_cephalus

еси ты такой вумный, то не значит никто не умный, я делала запрос справки поэтому и пыталась использовать согласно справки EQL!

Но работает почему-то EQU...вот!
Автор: king_stiven
Дата сообщения: 04.12.2009 12:14
не спорьте правильно
EQU
EQL это ошибка
Автор: mugil_cephalus
Дата сообщения: 04.12.2009 12:16
Tase4ka
1) та реплика ( http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=1820#13 ) адресована была wolf0425
2) я сам пострадал с опечаткой справки

в какой-то команде (помимо if) я тоже натыкался на опечатку в операторах сравнения - с тех пор "ученый"
Автор: wolf0425
Дата сообщения: 04.12.2009 12:16
mugil_cephalus

Цитата:
ах, если бы...
if /?
где оператор_сравнения принимает следующие значения:
EQL - равно
Это что у вас за ОС?

Код: where compare-op may be one of:
EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal
Автор: mugil_cephalus
Дата сообщения: 04.12.2009 12:26
вот еще опечатка в ntcmds.chm
enableextension
Включает расширения командного процессора до появления соответствующей команды endlocal, вне зависимости от состояния расширений командного процессора перед командой setlocal.
disableextensions
Выключает расширения командного процессора до появления соответствующей команды endlocal, вне зависимости от состояния расширений командного процессора перед командой setlocal.

у enableextension - отсутствует "s"

вот еще


это из станека

Добавлено:
wolf0425

Цитата:
Это что у вас за ОС?

я сам бы хотел знать того переводчика
Автор: 192168
Дата сообщения: 04.12.2009 15:10
Код:

:begin
Set/p Oper= Ввод:
If %Oper%==1 goto 1
If %Oper%==2 goto 2

Как записать
If %Oper%==(кроме 1 или 2) goto begin ?

If /I %Oper% NEQ 1
If /I %Oper% NEQ 2
не сработало.

Спасибо.
Автор: 01MDM
Дата сообщения: 04.12.2009 15:24

Цитата:
Как записать
If %Oper%==(кроме 1 или 2) goto begin ?


Сразу определи переменную Oper на случай, если будет "пустой" ввод (просто Enter):

Код:
@echo off
setlocal

set "Oper=0"

:begin
Set/p Oper= Ввод:
If %Oper%==1 goto 1
If %Oper%==2 goto 2
goto:begin

:1

:2

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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