IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Руководство для новичков (http://www.imho.ws/forumdisplay.php?f=35)
-   -   Работаем с командной строкой... (http://www.imho.ws/showthread.php?t=95070)

Sambotey 30.10.2005 20:53

Работаем с командной строкой...
 
Несколько вопросов:
1. Иногда, на запрос выдается много информации и она не помещается на экран. Тогда все прокручивается и в результате можно видеть лишь то, что поместилось на последней страничке. Как сделать, чтобы информация выдавалась частями, чтобы успевать прочесть все?
2. Когда указываешь название директории, состоящее из нескольких слов, все слова названия, начиная со второго воспринимаются, как параметр, как указать, что это - именно название директории. Например, "Program Files".

Hatifnatt 30.10.2005 21:22

1 Для команды dir существует параметр /p который позволяет выводить данный постранично, а вобще можно воспользоваться оператором пернаправления (например в файл)
Пример rar /? > c:\rar.txt итого получим на диске C:\ файл rar.txt с раровской помощью, но работает этот способ не для всех программ.
2 Надо заключать имена файло в которых есть пробелы в кавычки "C:\Program Files\..." и все будет нормально.

Borland 30.10.2005 22:47

1. Существует волшебная команда "more"
Например,
Код:

dir *.* |more
выводит листинг файлов поэкранно...
Предназначена же она специально для обработки вывода команд, в которых нет собственной фичи для постраничного вывода.

СТРЕЛЕЦ 31.10.2005 09:03

Цитата:

Hatifnatt:
2 Надо заключать имена файло в которых есть пробелы в кавычки "C:\Program Files\..."
А ещё лучше писать их в дос-формате c:\cd c:\progra~1\

Hatifnatt 01.11.2005 00:01

Цитата:

xTiez:
А ещё лучше писать их в дос-формате c:\cd c:\progra~1\
Но переводить самому имена в дос формат не так уж просто, в любом случае для того кто задает такие вопросы. Поэтому этот вариант я нестал приводить в пример.
Sambotey без обид =)

Madness 01.11.2005 00:11

Еще как вариант - запустить команду через cmd.exe, и если в свойствах окна оставлен буфер как по дефолту, то после выполнения можно проскроллировать вверх.

Borland 01.11.2005 01:48

Цитата:

Madness:
и если в свойствах окна оставлен буфер как по дефолту
Кстати, эта фича зависит от ОС. У NT3.51&4.0 по дефолту - как раз-таки 25 строк...

Sambotey 02.11.2005 22:11

Hatifnatt: Но переводить самому имена в дос формат не так уж просто, в любом случае для того кто задает такие вопросы.[QUOTE]
Действительно, не просто. Hatifnatt, расскажи поподробнее, как это делается...
Заодно еще один глупый вопрос: как из командной строки прочитать текстовый файл... Ну или может быть можно картинку просмотреть )

Borland 03.11.2005 03:08

Цитата:

Sambotey:
как из командной строки прочитать текстовый файл...
1. Любым консольным текстовым редактором (например - edit, встроенный в винду).
2. Командой more file.txt

Но работает это только для файлов с кодировкой cp866 (ДОС) или англоязычных.

FAR умеет отображать в том числе и виндовую кодировку.

Premium 03.11.2005 04:31

Цитата:

Borland:
2. Командой more file.txt

Но работает это только для файлов с кодировкой cp866 (ДОС) или англоязычных.
1. Сначала в консоли даешь команду chcp 1251, жмешь {Enter}
2. Потом команду more file.txt и читаешь

СТРЕЛЕЦ 03.11.2005 05:19

Цитата:

Sambotey:Действительно, не просто. ... расскажи поподробнее, как это делается...
Да не так всё страшно. ;)
Имя папки не дожно превышать 8 символов. Лишние отбрасываются, в конце пишем ~1
C:\Program Files пишется как C:\Progra~1, C:\Documents and Settings соответственно C:\Docume~1 (если похожих названий несколько то ~2,~3 и тд). Пробелы не учитываются C:\Documents and Settings\All Users - C:\Docume~1\AllUse~1

Короткие тексты (один или несколько через пробел) читаются командой TYPE , большие с добавлением "|more" как сказал Borland.

Smitis 06.11.2005 23:30

Я бы не рекомендовал использовать имена в коротком формате, если в этом нет острой необходимости. Могу назвать как минимум две причины:
1. На нтфс генерация коротких имён может быть отключена.
2. Суффикс может быть не только ~1, а любой другой вида ~число. Причём число может быть даже многозначным.
Да, можно сказать, что генерация коротких имён включена по умолчанию и отключают её редко. И короткое имя для "c:\program files" скорее всего будет "c:\progra~1".
Но! Речь идёт не о своей системе, которую знаешь как облупленную. Генерация коротких имён вполне может быть отключена неопытным пользователем каким-нибудь "твикером" для ускорения работы ОС. А мне уже встречались "c:\progra~2" пару раз и я зарёкся после этого использовать короткие имена. Более того, кроме тривиального случая с "program files" вполне реальная ситуация, когда куча пользовательских папок (например с фотками) могут иметь совершенно непонятные короткие имена типа "деньро~1", "деньро~2", "деньро~3" т.д. Сам видел :)

СТРЕЛЕЦ 07.11.2005 08:02

Человек просил рассказать как это делается - рассказали, а когда и как пользоваться сам решит.
А потребность в коротком формате может возникнуть не только в командной строке, но и при написании пакетных (*.bat) файлов. Например для архивации с удаленного компьютера. Или когда длинные имена в кавычках почему-то не работают.

Smitis 07.11.2005 12:36

xTiez
Цитата:

xTiez:
Человек просил рассказать как это делается - рассказали
Зачем человека с толку сбиваешь? Я же говорю - то, что работает у тебя, не обязательно заработает у других. И делается это НЕ ТАК.

Hatifnatt 08.11.2005 00:14

Цитата:

Smitis:
И делается это НЕ ТАК.
Если как ты говоришь это делается НЕ ТАК, то будь добр расскажи как это делается, я сам не стал отвечать, т.к. короткие имена дело тонокое и для разных машин (соглашусь с тобой) индивидуальное. Но по моему xTiez дал человеку хотя бы представление как в общих чертах что делается. Но раз ты столь категорично заявляешь что делается это НЕ ТАК, то ждем твоего варианта! Думаю это тоже будет интересно.
Сорри за некоторый оффтоп.

Smitis 08.11.2005 02:53

Hatifnatt
Цитата:

расскажи как это делается
К сожалению, бОльшая часть моего предущего поста потерялась (после редактирования) - сервер вчера выдавал сообщение, что мол перегружен, а я не обратил внимание. Ну да ладно. Расказываю. Делается, например, так.
Задача: из командного файла найти короткое имя соответствующее заданому длиному.
Ограничения: линейка NT (NT4,XP,2000,2003,...) ибо возиться для 9х нет ни желания ни самой системы для тестирования ;)
Решение:
Командный файл, который будет использован для определения короткого имени (GetShortName.cmd):
Код:

@setlocal enableextensions
@if /i "%~1" == "/full"  goto full
@set _sn_=%~s2
@call:name %_sn_%
@endlocal & set %~1=%_sn_%
@goto:eof
:full
@endlocal & set %~2=%~s3
@goto:eof
:name
@set _sn_=%~nx1

Использование из другого командного файла:
call GetShortName [/full] var file
где
/full - получить полный путь к файлу, иначе только имя с расширением
var - переменная среды, которой будет присвоено короткое имя
file - имя файла

Тестируем (TestShortName.cmd):
Код:

@echo off
call GetShortName sn1 "C:\Program Files\Common Files"
echo ^<%sn1%^>
call GetShortName /full sn1 "C:\Program Files\Common Files"
echo ^<%sn1%^>
call GetShortName sn2 "C:\Program Files\Common Files\Microsoft Shared\TextConv\EXCEL32.CNV"
echo ^<%sn2%^>
call GetShortName /full sn2 "C:\Program Files\Common Files\Microsoft Shared\TextConv\EXCEL32.CNV"
echo ^<%sn2%^>

Написано наспех, желающие могут доработать ;) , например сделать проверку параметров, существование файла/папки и т.д.

Premium 08.11.2005 04:16

Smitis
Многа букв :) И отдельный батник держать, только ради того, чтоб узнать короткое имя некузяво. Проверка папки:
Код:

@ECHO OFF
SET my_dir=%ProgramFiles%\Common Files\Microsoft Shared
FOR %%A IN ("%my_dir%") DO IF EXIST %%~sA\NUL ECHO %%~sA
PAUSE

Ну чтоб короткое имя соответственно %%~nxsA.
%ProgramFiles% написал, потому что у меня нету C:\Program Files :( , она у меня обзывается C:\TOOLS

Smitis 08.11.2005 12:48

Premium
Одно и то же часто можно сделать разными способами ;) Особено это касается программирования.
Я специально оформил в виде отдельного батника, что бы было универсальное решение. И, кстати, его можно оптимизировать (писал, как я уже говорил, наспех, ещё и ночью...)
Вот доработанный вариант:
Код:

@setlocal enableextensions
@if /i "%~1" == "/full"  goto full
@endlocal & set %~1=%~nxs2
@goto:eof
:full
@endlocal & set %~2=%~s3
@goto:eof


Sambotey 10.11.2005 08:48

Раз уж зашла речь о *.bat и *.cmd файлах...
Для чего они существуют и где можно узнать синтаксис выражений для их создания?

Ghost 10.11.2005 09:20

Sambotey
BAT (batch - пакетный) и CMD (command - командный) - обычные текстовые файлы, содержащие вызовы встроенных в ОС команд и вызов программ (любых, лишь бы система их могла запустить). Синтаксис прост: одна строка - одна команда. Список команд можно получить, набрав в консоли "help"; справку по отдельной команде - "help <имя команды>" или "<имя команды> /?". Некоторые команды ОС представляют собой отдельные программы - exe-файлы; они хранятся в директории %windir%\system32 - запускай их в консоли с параметром "/?" для выяснения "шо-за-хрень". Ну и еще можно еще добавить возможность отключения эхо-повтора команды (т.е. вывода ее текста на экран перед исполнением) при помощи символа '@' в начале строки и перенаправления вывода в файл: "команда" > "файл" - создает новый файл, "команда" >> "файл" - добавляет в существующий.

З.Ы. Да и виндовом хелпе (тот, что вызывается из меню "Пуск") есть достаточно полная справка по этому вопросу...

Merlin Cori 10.11.2005 09:42

Sambotey
в дополнение к сказанному Ghost. Командные файлы еще понимают параметры команденой строки, передаваемые им. И помимо выполнения команд операционной системы, имеют раяд своих, которые помогают управлять последовательностью выполнения

% - признак параметра, переданного в данный пакетный файл

: - признак метки для перехода

CALL - вызов другого пакетного файла из данного,

CLS - очистка экрана,

ECHO - вывод на экран строки сообщений,

EXIT - прервать обработку данного пакетного файла,

EXIST- проверить наличие файла на диске,

FOR .. IN .. DO - возможность многократного выполнения одной команды MS DOS,

GOTO - безусловный переход на строку с заданной меткой,

IF - условный переход на строку с заданной меткой,

PAUSE- ожидание нажатия клавиши Пользователем,

REM - комментарий,

SHIFT- сдвиг формальных параметров(возможность обрабатывать больше 10 параметров).

Подробнее почитай здесь:
_http://www.firststeps.ru/msoffice/win/bats/bats1.html

или ищи в яндексе, гугле и т.д.

Borland 10.11.2005 16:18

Цитата:

Ghost:
запускай их в консоли с параметром "/?" для выяснения "шо-за-хрень"
Только осторожно. Если команда ничего не ответила (или ругнулась, что не понимает ключа "/?"- значит это, скорее всего, системный сервис и запуску не подлежит. И не стоит пытаться запустить его без ключей или с ключами, значения которых вы не вполне понимаете - это червиво своими последствиями (не зря же по умолчанию содержимое этой папки не отображается в Проводнике).

Smitis 10.11.2005 20:00

Хелп по командному процессору находится в файле c:\windows\help\ntcmds.chm


Часовой пояс GMT +4, время: 15:38.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.