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

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

Автор: FXPELIVE
Дата сообщения: 14.10.2009 11:44
Помогите с лабой не могу вкурить как это сделать:
Цитата:
Создайте командный файл, в котором с помощью оператора FOR создаются каталоги и файлы, имена и местоположение которых задаются как параметры. При наличии в указанном каталоге такого-же объекта должно быть выдано соответствующие сообщение.
Автор: ponand
Дата сообщения: 14.10.2009 13:55
01MDM

Цитата:
Все зависит от батника. Попробуй такой

попробывал и сразу заметил разницу с моим батником

Цитата:
Расход памяти потребляемой процессом вырос до ~12Mb

при этом объем выделения памяти растет пропорционально потребляемой процессом (cmd.exe) в моем случае расход памяти потребляемой процессом (cmd.exe) всегда составляет примерно ~1,2 мб а при достижении объема выделения памяти 1,3 гб батник начинает глючить
складывается токое ощущение что Findstr находясь в нутри цикла For каждый раз только открывает файл для поиска и он остается открытым и при следующем проходе открывает его еще раз и так до тех пор пока память полностью не закончится при этом если даже убить процесс объема выделения памяти меньше не становится!
Автор: 01MDM
Дата сообщения: 14.10.2009 15:17
BVV63, ponand


Цитата:
Скажите, а файл 1.txt тоже стал размером 12Mb?

Я не дождался, прервал выполнение. Файл должен был создаться только после присвоения всем переменным значения, просто интересно есть ли ограничения на кол-во переменных или вопрос памяти? В PowerShell по умолчанию 4096. А высчитывать возможный размер конечного файла...
В принципе можно. Если всего создается 10*100*1000=1000000 переменных и каждая строка в 1.txt составляет (по первой переменной (var_0_0_0=0) 13байт c переносом строки) то это получается 13000000 байт или приблизительно 12 мегабайт. К этому прибавить неучтенные байты из названий и значений - допустим еще 2 мегабайта.


Добавлено:
FXPELIVE

Цитата:
Создайте командный файл, в котором с помощью оператора FOR создаются каталоги и файлы, имена и местоположение которых задаются как параметры.

Задача не полная, как отличить что создавать, каталог или файл? По каким признакам? Можно создать папку:
md C:\1.txt

А можно файл:
cd.>C:\1.txt
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 16:22
никак не могу понять, где ошибка:
вот скрипт:
echo on

:type1
type 83572.txt
if not ErrorLevel 0 (goto type1)

pause

после if not ErrorLevel 0 (goto type1) он сразу перескакивает на pause, а не возвращается на метку :type1
вот output:
G:\scripts>echo on

G:\scripts>type 83572.txt
Не удается найти указанный файл.

G:\scripts>if not ErrorLevel 0 (goto type1 )

G:\scripts>pause
Для продолжения нажмите любую клавишу . . .

Автор: 01MDM
Дата сообщения: 14.10.2009 16:42
mugil_cephalus

Код:
if not %errorlevel%==0 (goto:type1)
Автор: NIKZZZZ
Дата сообщения: 14.10.2009 16:45
mugil_cephalus

Цитата:
if not ErrorLevel 0 (goto type1)

Здесь непонятно, к чему относится "not"
Такая строка более корректна.

Код: if not %ErrorLevel%==0 (goto type1)
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 17:16
01MDM


Цитата:
if not %errorlevel%==0 (goto:type1)


NIKZZZZ


Цитата:
if not %ErrorLevel%==0 (goto type1)


дело в том, что мой скрипт -
Цитата:
if not ErrorLevel 0 (goto type1)

- это полная копия кода из книги уильям р. станек "командная строка ms win"

01MDM

1) в твоем коде - (goto:type1) перед label'om type1 стоит ":" - а оно необходимо?
NB:
F:\Documents and Settings\admin>goto /?
Передача управления содержащей метку строке пакетного файла.

GOTO метка

------------------
А не GOTO :метка

2) в твоем коде - (goto:type1) отсутствует пробел - это тоже необходимо?
Автор: wolf0425
Дата сообщения: 14.10.2009 18:01
mugil_cephalus

Цитата:
соответственно, это, по логике, должно приводить к сбоям в исполнении батника

если батник криво написан - запросто, есго же и из cmd можно очень по разному запустить - в том числе и с указанием полного пути.


Цитата:
:type1
type 83572.txt
if not ErrorLevel 0 (goto type1)
pause
после if not ErrorLevel 0 (goto type1) он сразу перескакивает на pause, а не возвращается на метку
так вроде все верно.
(ErrorLevel 0) по определению true, так как меньше нуля ErrorLevel не бывает, if ErrorLevel 0 - это %ErrorLevel% >= 0


Цитата:
- это полная копия кода из книги уильям р. станек "командная строка ms win"

хорошая трава была у автора


Цитата:
1) в твоем коде - (goto:type1) перед label'om type1 стоит ":" - а оно необходимо?
оно удобно, делает goto :метка и call :метка похожими.
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 18:15
wolf0425

Цитата:
так вроде все верно.
(ErrorLevel 0) по определению true, так как меньше нуля ErrorLevel не бывает, if ErrorLevel 0 - это %ErrorLevel% >= 0


я что-то не понял, но, у меня этого - 83572.txt - файла точно нет, поэтому может быть все, что угодно, но не ноль и конструкция if not ErrorLevel 0 должна давать true

Цитата:
G:\scripts>type 83572.txt
Не удается найти указанный файл.
(может ты not не заметил)

if not ErrorLevel 0 будет false только если ot'type'tsya файл 83572.txt

я, кстати, думаю, что правы 01MDM и NIKZZZZ, просто не думал, что в книге синтаксическая ошибка

Добавлено:
wolf0425

Цитата:
если батник криво написан - запросто, есго же и из cmd можно очень по разному запустить - в том числе и с указанием полного пути.

я имел ввиду, что щелкну крысой по *.bat'u, который содержит скрипт: команда %0
Автор: NIKZZZZ
Дата сообщения: 14.10.2009 18:52
mugil_cephalus

Цитата:
if not ErrorLevel 0 будет false только если ot'type'tsya файл 83572.txt

Гарантировано:

Код: if %errorLevel% NEQ 0 goto type1
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 18:55
wolf0425

Цитата:
так как меньше нуля ErrorLevel не бывает

уильям р. станек указывает, что %errorlevel% выдается меньше нуля (например, -2) при арифметических ошибках - set /a
правда, я не проверял его слов
Автор: NIKZZZZ
Дата сообщения: 14.10.2009 19:50
mugil_cephalus

Цитата:
уильям р. станек указывает, что %errorlevel% выдается меньше нуля

Код ошибки может быть любым числом, в том числе и отрицательным. Определяется только разработчиком программы. Либо это надо проверять экспериментально, либо обращаться к документации. Проще проверить.

Пример

Код: set /a x=1/0
echo %ErrorLevel%
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 20:14
NIKZZZZ

Цитата:
if %errorLevel% NEQ 0 goto type1

может синтаксис:
if %errorLevel% NEQ 0 (goto type1)
???
Автор: NIKZZZZ
Дата сообщения: 14.10.2009 20:25
mugil_cephalus

Цитата:
может синтаксис:
if %errorLevel% NEQ 0 (goto type1)

Одна команда - GoTo , зачем скобки?
Автор: mugil_cephalus
Дата сообщения: 14.10.2009 20:38
NIKZZZZ

Цитата:
Здесь непонятно, к чему относится "not"

F:\Documents and Settings\admin>if /?
Оператор условного выполнения команд в пакетном файле.

IF [NOT] ERRORLEVEL число команда


Цитата:
Одна команда - GoTo , зачем скобки?

так у Станека в книге
Автор: wolf0425
Дата сообщения: 15.10.2009 00:17

Цитата:
меня этого - 83572.txt - файла точно нет, поэтому может быть все, что угодно, но не ноль и конструкция if not ErrorLevel 0 должна давать true
замечательно. предположим что у тебя errorlevel=1
для такого кода сочетание (errorlevel 0) равно true так как 1 больше чем прописанный для сравнений 0

в команде if ErrorLevel 1 goto :error
переход происходит при значениях %ErrorLevel% 1 или больше

Хочешь сравнивать на равно - сравнивай числа сам и на равенство, а не проси готовый результат сравнения %ErrorLevel% >= число.





Добавлено:

Цитата:
так у Станека в книге
Ну скажи спасибо ему или переводчику.
Как правильно - можешь потестировать сам или поискать на microsoft.com
Автор: BVV63
Дата сообщения: 15.10.2009 05:22
1. 01MDM

Цитата:
А можно файл:
cd.>C:\1.txt

Ну, надо же. Сколько хитростей я не знаю, оказывается.
2. Свою проблему с for... in... do... (описана на предыдущей странице) я решил. Оказывается между for и ключом /f в Семёрке и XP нужен пробел, а в Висте он не обязателен.
3. Перенос строки ^ в Семёрке стал хуже работать . Посреди полного имени файла его применять стало нельзя - система не понимает.
Автор: Kashey69
Дата сообщения: 15.10.2009 10:05
При добавлении коментария к учетной записи пользователя с помощью команды
Код:
net user user /comment:"bla bla"
стоит ограничение на его длину в 48 символов, однако при использовании GUI такого ограничения вроде нет. Есть ли возможность в батнике обойти ограничение на длину комментов?
Автор: 01MDM
Дата сообщения: 15.10.2009 10:21
Kashey69

У меня позволяет вставлять больше 48 знаков (Win-7 7600 RTM)

Код:
> net user mdm /comment:"Это тестовый комментарий, состоящий из 48 знаков"
The command completed successfully.

> net user mdm /comment:"Это тестовый комментарий, состоящий из 49 знаков."
The command completed successfully.
Автор: tolyn77
Дата сообщения: 15.10.2009 10:28
подскажите пожалуйста как сформировать сегодняшнюю дату в такой форме?
месяц_день, пример 10_08
Автор: Kashey69
Дата сообщения: 15.10.2009 10:31
Ось- XP SP3. Выполняется команда не из окна cmd, а запускается из батника. Батник выполняет ф-цию добавления пользователя.
Выдает следующее сообщение
Для параметра /СOMMENT введено недопустимое значение
Автор: slay1212
Дата сообщения: 15.10.2009 10:38

Цитата:
при ключе
HKCU\Software\Policies\Microsoft\Windows\System\DisableCMD=1 все должно пахать - но не пашут батники. Как при =2 ключике. "Приглашение комстроки отключено вашим администратором".

Сам себе отвечу - ключ = 1 отключает и запуск бат cmd, и запрет за запуск cmd. А =2 = запрещает только запуск комстроки, а батники разрешает. И из фара например комстрока в случае =2 тож работает, что очень грустно . Вообще цель такая - запретить запуск и смд и ком строки (чтоб не пахали системные вещи типа net use, а мои батники cmd как нибудь работали, например из планировщика, или еще как. Кто что посоветует? Пока при =1 бат задания из планировщика не запускаются. Но можно например запустить что-то из проводника.
Автор: 01MDM
Дата сообщения: 15.10.2009 11:00
Kashey69

Цитата:
Выполняется команда не из окна cmd, а запускается из батника

Разницы нет.

Цитата:
Ось- XP SP3

Наверное нельзя, вопрос где эти данные сохраняются?
tolyn77

Код:
@echo off
for /f "tokens=1,2 delims=." %%i in ("%date%") do set "d=%%j_%%i"
echo %d%
Автор: wolf0425
Дата сообщения: 15.10.2009 11:21
tolyn77
Цитата:
подскажите пожалуйста как сформировать сегодняшнюю дату в такой форме?
месяц_день, пример 10_08
set d=%date:~3,2%_%date:~0,2%
Автор: Kashey69
Дата сообщения: 15.10.2009 11:39
01MDM

Цитата:
Наверное нельзя, вопрос где эти данные сохраняются?

Но если через control userpasswords2 добавлять комментарий, то все норм. ограничения никакого нет, поэтому напрашивается вопрос, как в батнике это обойти. нужен комментарий длиннее чем 48 символов.
Автор: FXPELIVE
Дата сообщения: 15.10.2009 12:04
01MDM

Цитата:
Задача не полная, как отличить что создавать, каталог или файл? По каким признакам? Можно создать папку:
md C:\1.txt

А можно файл:
cd.>C:\1.txt

Я и сам непонял... Препод сказал что-то вроде: k18.bat C:\test file1.txt file2.txt
Автор: 01MDM
Дата сообщения: 15.10.2009 12:20
FXPELIVE
Ну тогда с условием, что если с расширением, то это файл:

Код:
@echo off

for %%i in (%*) do (
if exist %%i (
echo %%i already exist
) else (
if not "%%~xi"=="" (cd.>%%i) else (md %%i)
)
)
Автор: FXPELIVE
Дата сообщения: 15.10.2009 12:31
01MDM
Спасибо
Автор: tolyn77
Дата сообщения: 15.10.2009 14:07
01MDM
wolf0425
спасибо

Добавлено:
нужно в винде через проксю качнуть файлы по фтп, делаю скрипт
set use_proxy=on
set ftp_proxy=http://anti:virus@proxy:3128
set http_proxy=http://anti:virus@proxy:3128

wget -v --cache=off --no-directories --timestamping --directory-prefix=D:/ ftp://ftp.ru:21/*
а он на проксе выдает такую ошибку в чем может быть дело?

Resolving proxy... 10.0.0.1
Connecting to proxy|10.0.0.1|:3128... connected.
Proxy request sent, awaiting response... 502 Bad Gateway
2009-10-15 15:16:13 ERROR 502: Bad Gateway.

подскажите что не правильно делаю?
заранее благодарен
Автор: 7ead3471
Дата сообщения: 15.10.2009 14:58
Возможно пропустил...но гугль не помог или туплю. в общем есть такой код


Код:
call :read_settings %~dp0Settings.txt || exit /b 1

HOST : %HOST%
LOGIN : %LOGIN%
PASS: %PASS%
FOLDER_IN: %FOLDER_IN%
FOLDER_OUT: %FOLDER_OUT%

:read_settings

set SETTINGSFILE=%1

if not exist %SETTINGSFILE% (
echo FAIL: Can't find file
exit /b 1
)

for /f "eol= delims== tokens=1,2" %%i in (%SETTINGSFILE%) do (

set %%i=%%j
)

echo %LOGIN%>>ftp.txt
echo %PASS%>> ftp.txt
echo lcd %FOLDER_OUT%>> ftp.txt
echo cd %FOLDER_IN%>> ftp.txt
echo bin>> ftp.txt
echo mget * -y >> ftp.txt
echo close >> ftp.txt
echo quit >> ftp.txt

ftp -s:ftp.txt %HOST%

del ftp.txt

PAUSE

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

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


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