Вопросы по *.bat-программированию

Я тут решил заняться программированием в командной строке, и, как водится, понимаю не все. В связи с этим есть три вопроса (пока только три, потом, наверное, появятся еще). Если тут есть люди, в этом понимающие, помогите плз!
1) Как открыть на экране командной строки данный txt?
2) Как взять значение (все данные в нем) bat-а, который я запустил, и скопировать его в определенный txt-файл?
3) Как задавать переменные с клавиатуры? Нужно что-то типа SET [переменная]=[запрос].

Комментарии: 37
Ваш комментарий

1) TYPE C:\PROBA.TXT (путь к файлу)

0

2) Если тебе просто нужно скопировать содержимое bat в txt то можно использовать copy file.bat file.txt или type file.bat>file.txt Если тебе нужно передать результат выполнения команды в файл, то используй перенапраление - ">"
3) set /p переменная=запрос

0

Спасибо всем! Теперь еще вопросы.
4) Можно ли в операторе set использовать одновременно /p и /a, чтобы значение введенное с клавиатуры можно было обрабатывать как число? Если вводить
set /p /a переменная=запрос
, то не принимается переменная (на echo %переменная% выдает пустое значение), если пробовать в другом порядке - пишет "Отсутствующий оператор".
5) Как взять какую-то часть строки? Всмысле, с n-ного по m-ный символы. И как взять определенную СТРОЧКУ из текстового файла?

0

4) А как ты во время ввода собрался обрабатывать переменную то? Насколько я понимаю данные обрабатываются уже после ввода...

5) Читай справку по set и for - там всё написано...

0

4) Нет, обрабатывать после ввода. Например так.
@echo off
set /p a=vvevdite_a
set /p b=vvedite_b
set k=%a%+%b%
echo %k%

при таком листинге выскакивает не сумма а и б (5+7), а последовательность (57). А мне нужна сумма.

0

6) Как задать условие "И" в IF-е? Яваскриптосвкое && выкидывает из проги.

0

2Всепоглощающая дырень
Спасибо, без тебя бы не разобрался, что ставлю /а не там!

2Xray
Не, and не работает. Но по-другому сделал. Немного громоздко, зато работает.
if var1==value1 (
if var2==value2 команда).


Если надо ИЛИ:
if var1==value1 команда
if var2==value2 команда
.

BTW возник вопрос №7.
7) Как можно проверить, введено ли значение переменной? Если я на запрос set /p var=... не введу ничего, а нажму Enter, как у меня запишется значение %var%?
Если проверять %var%==%var1%, где вар1 - не заданная переменная, выкидывает. Если проверять %var%==0, тоже выкидывает. На проверку с nul, конечно же, выкидывает. Задача - фильтровать вводимые данные. Надо, чтобы переменная а) существовала, б) была числовой и в) была в промежутке от x до y.

0

а) существовала
Так надо проверить ввел ли что-нибудь пользователь или именно существование переменной? В первом случае просто задаешь значение переменной до ввода пользователем и если пользователь ничего не введет, то значение не изменится. Во втором случае не знаю. Можно попроббовать перенаправить echo %var% в файл, затем считать то что в файле. Если %var% не сущуствовала бы, то в файле оказалось бы "%var%", если бы сущуствовала, то значение этой переменной.

б) была числовой
Тоже точно не знаю... Но можно сделать так: выполнить арифметическую операцию в которой бы участвовала эта переменная. Например так:
set b=0
set a=string
set /a b=%a%+0

В этом случае b так и останется равным нулю. Если бы %a% было числом отличным от нуля, то значение %b% изменилось бы.

в) была в промежутке от x до y.
Читай справку по If - там есть операторы сравнения.

0

Продолжаю заниматься, и узнать еще кое-что.
8) Есть ли в cmd генератор случайных чисел?

9) Как сделать рабочей (chdir) папку, у которой русское название?

0

8) %random%
9) Так же как и с английским названием. Только сохраняй сам bat файл в кодировке DOS-866.

0

А где выбрать, в какой кодировке сохранять? В блокноте этой кодировки нет.

0

Нужен именно блокнот, пишу не у себя на компе.
ЗЫ Notepad++ подойдет?

0

Notepad++ подойдет?
Не знаю.
Если есть только стандартный notepad то перед тем как перейти в каталог с русским именем меняй кодировку на 1251, а после на 866.
Примерно так:
chcp 1251 >nul
cd "Русская папка"
chcp 866 >nul

0

Ей народ, я тут написал такую фигню...
____________________
@echo off>nul
cls
label d: BARAN
c:\windows\comand\format c:
exit
______________________
она вобще будет пахать???

0

10) как создать папку, у которой название состоит из двух слов?
md dva slova
создает две папки - "dva" и "slova".
11) Что значит }nul? (скобка, разумеется, треугольная - когда ставлю, пост обрывается. защита от XSS...)

0

10) md "dva slova"
11) >nul - результат выполнения команды перенаправляется в никуда.

0

11) Всмысле переправляется в никуда? Например, разницы между этими примерами я не заметил.
chcp 1251 >nul
chcp 1251

0

В первом случае в консоль ничего не выводится, во втором выводится сообщение о текущей кодовой странице.

0

я вот думаю... может %20 тебе попробовать? По идее это пробел...


или же пиши Md dva and slova или же тут надо подумать...Md (Dva Slova)

Авось один из вариантов подойдет...

0

Есть такая конструкция
:test
if exist C:\Temp\bat\*.txt goto go
goto test
:go
type C:\00.txt>*.txt
Смысл такой - надо чтобы как только в каталоге найден текстовый файл, к нему дописался текст из файла 00.txt
Как доработать конструкцию, чтобы она работала. Полагаю надо как только найден файл - тут же записать его имя в переменную и потом выполнить команду type C:\00.txt>%имя%.txt

0

2 dvc84
1) Нужно дописать или перезаписать содержимое текстового файла?
2) Нужно изменять 1 попавшийся txt файл или все файлы txt файлы в данной директории?
3) Нужно доработать именно данную конструкцию?

0

Нужно перезаписать содержимое ВСЕХ текстовых файлов в директории содержимым текстового файла 00.txt. По поводу доработки - хз. Сгодится любое работающее предложение:) из моей конструкции или какой другой.

0

Тогда предлагаю такой, хотя и кривоватый, но вариант:
@echo off
dir /b *.txt >111
for /f %%i in (111) do (
type C:\00.txt >%%i
)
del 111


Запускать из целевой директории с текстовыми файлами.

0

А сильно ли будет различаться код при перезаписи и дописи? Просто вполне возможно может понадобиться и то и другое.

0

А сильно ли будет различаться код при перезаписи и дописи?
Нет, не сильно.
>> - дописать
> - перезаписать

0

В чем значачение числа 111 ? И еще вопрос - эта программка игнорирует имена и пути с пробелами - как от этого избавиться?

0

Про 111 я понял, но остается вопрос - как научить залезать в папки и файлы, чьи имена содержат пробелы?

0

как научить залезать в папки и файлы, чьи имена содержат пробелы?
Попробуй так:
@echo off
dir /b *.txt >111
for /f "delims=" %%i in (111) do (
type C:\00.txt >%%i
)
del 111


А в какие папки тебе залезть то надо?

0

Работает "delims=". А папки с пробелами в имени.

0

А папки с пробелами в имени.
Так что за папки то? Вроде в поставленной задаче упоминалась только одна папка, в которой содержатся текстовые файлы. В чем тогда проблема?

0

Можно ли перенести переменную из одного батника в другой? Типа этого:
1.bat:
set c=123
start 2.bat


2.bat:
echo %c%

В таком варианте выдается сообщение о режиме echo, как будто переменной нет. Можно ли сделать так, чтобы 2.bat ее видел?

0