Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

Командный интерпретатор   Найти похожие ветки 

 
Ломброзо ©   (2006-07-25 16:59) [0]

Потребовалось во всю мощь раскочегарить cmd.exe, с циклами, макроподстановками, условиями и пр. В MSDN про синтаксис batch-файлов вообще ничего нет, а интернет скуден. Где и чего можно про оные почитать?


 
Styx_   (2006-07-25 17:02) [1]

cmd /?
for /?
if /?


 
Ломброзо ©   (2006-07-25 17:06) [2]

Styx_   (25.07.06 17:02) [1]
шайтан!


 
isasa ©   (2006-07-25 17:14) [3]

Ломброзо ©   (25.07.06 17:06) [2]
Ежели от Васика еще не тошнит (шутка), можно удариться в wscript.exe(cscript.exe) (см. по этим словам MSDN).
Очень хорошее впечатление, для винды самое оно. Может все, даже COM/DCOM (ADO, как два пальца).


 
isasa ©   (2006-07-25 17:16) [4]

Да, если тошнит, можно то-же самое, не на Java-script, интерпретатор то-же  wscript.exe(cscript.exe).


 
Ломброзо ©   (2006-07-25 17:26) [5]

isasa ©   (25.07.06 17:14) [3]
VB- и JScript я от зубов знаю :) а вот в знаниях по ДОС имею пробел


 
Eraser ©   (2006-07-25 17:30) [6]

> [5] Ломброзо ©   (25.07.06 17:26)

в странной книге Фигурнова кое что есть, но, к сожалению, далеко не все.


 
isasa ©   (2006-07-25 17:58) [7]

Ломброзо ©   (25.07.06 17:26) [5]
Так в *nix командный интерпретатор еще имеет смысл, а в винде - бесперспективно. Тут почитаешь от MS и иже, так и COM уже в мусор.


 
vidiv ©   (2006-07-25 18:13) [8]


> Так в *nix командный интерпретатор еще имеет смысл, а в
> винде - бесперспективно

Да не скажи... сколько пользуюсь, только хвалю.
Если уж чтото архи невозможное - пишу утилзу на дельфи и все дела


 
StriderMan ©   (2006-07-25 18:38) [9]


> Так в *nix командный интерпретатор еще имеет смысл, а в
> винде - бесперспективно

это ты зря. Видать никогда толком не пользовался.
Открой хотя бы для интереса autoexec.bat на стандартной загрузочной дискетке, которую WIN98 генерит.


 
Yanis ©   (2006-07-25 18:41) [10]

В Windows XP (да и в 2003) очень хорошая справка по множеству команд.
У меня это файл ntcmds.chm.


 
Pazitron_Brain ©   (2006-07-25 18:48) [11]

Есть подобие линуксового bash для винды.
В Компьютерре писали.


 
isasa ©   (2006-07-25 18:54) [12]

StriderMan ©   (25.07.06 18:38) [9]
Открой хотя бы для интереса autoexec.bat на стандартной загрузочной дискетке, которую WIN98 генерит.


:)
Не. Ну ты уже совсем плохо обо мне думаешь.
Дествительно, пользуюсь редко.


 
Ломброзо ©   (2006-07-25 19:05) [13]

Yanis ©   (25.07.06 18:41)

То, что нужно


 
Alien1769 ©   (2006-07-25 19:05) [14]

пример для досовской задачи архивации файлов на ходу

@ echo test
@ echo off
del c:\nzupr\nzuprdbf\nzupr.arj >farj
arj u c:\nzupr\nzuprdbf\nzupr.arj c:\nzupr\nzuprdbf\*.dbf >>farj
IF ERRORLEVEL 1 GOTO COP
echo la-la press Enter.
pause "" >NUL
copy c:\nzupr\nzuprdbf\nzupr.arj a: >>farj
IF ERRORLEVEL 1 GOTO ER
echo ---------------------------------------------------------------------
echo bla=bla-bla
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pause "" >NUL
GOTO END
:ER
echo tra-tra-tra
pause "" >NUL
GOTO END
:COP
echo fa-fa-fa
pause "" >NUL
:END


 
StriderMan ©   (2006-07-25 19:06) [15]

nncron очень мощная штука. круче только WinAPI.


 
Ketmar ©   (2006-07-25 19:22) [16]

>Pazitron_Brain ©   (25.07.06 18:48) [11]
зачем подобие, когда есть сам баш?


 
Pazitron_Brain ©   (2006-07-25 19:53) [17]

> [16] Ketmar ©   (25.07.06 19:22)
> >Pazitron_Brain ©   (25.07.06 18:48) [11]
> зачем подобие, когда есть сам баш?

Баш для Линукса, а нужно для Винды. Или есть Баш для Винды?


 
Ломброзо ©   (2006-07-25 19:55) [18]

есть даже "линукс" под "винды", зовётся cygwin.


 
pasha_golub ©   (2006-07-25 20:30) [19]


> Pazitron_Brain ©   (25.07.06 19:53) [17]


> Баш для Линукса, а нужно для Винды. Или есть Баш для Винды?

Есть :0) В составе MinGW точно есть. По-моему, MSYS зовут его. Просто чума!!!


 
Ketmar ©   (2006-07-25 23:55) [20]

есть и совсем отдельно собраный. только смысл? чего, батников не хватает?
http://rsdn.ru/article/winshell/batanyca.xml


 
Danilka ©   (2006-07-26 10:57) [21]

[4] isasa ©   (25.07.06 17:16)
поддерживаю.
все-таки в батниках нет многих полезных вещей, которые доступны жаба-скриптам. например, функции, создание оле-объектов.
а время написания *.cmd и *.js примерно одинаковое. :)


 
TUser ©   (2006-07-26 11:50) [22]

> Pazitron_Brain

www.cygwin.org


 
pasha_golub ©   (2006-07-26 12:40) [23]


> TUser ©   (26.07.06 11:50) [22]

Во-во, он самый. Правда последнее время , вышедший из моды. Аналог MSYS: http://www.mingw.org/msys.shtml


 
Alex Konshin ©   (2006-07-26 12:58) [24]

> Ломброзо ©   (25.07.06 16:59)
> Потребовалось во всю мощь раскочегарить cmd.exe, с циклами,
>  макроподстановками, условиями и пр. В MSDN про синтаксис
> batch-файлов вообще ничего нет, а интернет скуден. Где и
> чего можно про оные почитать?

Есть хелп в поставке системы, только найти его непросто.
Я добираюсь до него так:
Десктоп -> F1 -> Customizing your computer -> See also -> Tools -> Command-line reference A-Z
После этого сразу сразу жму "Add to favotites", чтобы в следующий раз проще искать было.
Да, это действительно файл ntcmds.chm (ms-its:C:\WINDOWS\Help\ntcmds.chm::/ntcmds.htm), но если его открыть напрямую, то не будет полосы прокрутки в окне, что крайне неудобно.

Там есть и про переменные, и про встроенные комманды, и про переадресацию ввода-вывода.

Если есть конкретные вопросы - спрашивай, я на этом уже много собак съел.
Кстати, в cmd есть много забавных багов, могу тоже поделиться.


 
Ketmar ©   (2006-07-26 13:31) [25]

>Alex Konshin ©   (26.07.06 12:58) [24]
а может, статейку тогда? ну хоть кил на 5? %-)


 
Alex Konshin ©   (2006-07-26 14:11) [26]

Так лень ведь. И времени нет (тоже лень). :)

Ну некоторые стандартные приемы могу показать:

Получение директория, где находится бат-файл:

for /D %%I in ("%~dp0.") do set WTCOPY_HOME=%%~fI


Это пример получения таймстемпа в нужном формате (имейте в виду, что у меня американский локале, то есть для русского нужно поменять местами MM и DD):

for /F "usebackq tokens=1* delims= " %%I in (`echo %DATE%`) do (
set DAY_OF_WEEK=%%I
set ONLY_DATE=%%J
)

for /F "usebackq tokens=1,2,3* delims=/" %%I in (`echo %ONLY_DATE%`) do (
set MM=%%I
set DD=%%J
set YYYY=%%K
)

set ZIPFILE=%PROJECT_HOME%\%PROJECT%.%YYYY%%MM%%DD%.zip


 
Alex Konshin ©   (2006-07-26 14:20) [27]

Пример замены бекслеша на слеш:
set project_path=%PROJECT_HOME%\
:replace
for /F "usebackq delims=\ tokens=1*" %%I in (`echo %project_path%`) do (
 if "%%J" NEQ "" (set project_path=%%I/%%J) else (
   set project_path=%%I
   goto create_properties
 )
)
goto replace

:create_properties


Более сложный пример, который использует команду findstr.
Он читает файл в формате Java *.properties и достает значение свойства JAVA_HOME:
rem Get JAVA_HOME
for /F "usebackq delims=" tokens=1*" %%I in (`findstr /r "^JAVA_HOME *= *"" "%BUILD_CONFIG%"`) do (
 set _javahome=%%J
)

if "%_javahome%" NEQ "" (
 for /F "usebackq delims=" tokens=1*" %%I in (`echo %_javahome%`) do (
   set JAVA_HOME=%%I
 )
)

:check_JAVA_HOME
if "%JAVA_HOME%" EQU "" (
 echo ERROR: Variable JAVA_HOME is not set.
 echo You can specify this value in file build.config.
 exit 1
)

if not exist "%JAVA_HOME%\bin\java.exe" (
 echo ERROR: The value of variable JAVA_HOME is incorrect: %JAVA_HOME%
 exit 1
)

echo JAVA_HOME    = %JAVA_HOME%


 
Alex Konshin ©   (2006-07-26 14:31) [28]

Упс, в предыдущем примере JAVA_HOME читался не из *.properties файла. Он там в виде:
JAVA_HOME = "C:\jdk1.4";

Могу привести и другие примеры, но их надо подыскивать у меня на работе, я дома на бат не слишком программирую :)


 
Ketmar ©   (2006-07-26 14:31) [29]

ну вот -- уже почти статья и получилась. %-)


 
Alex Konshin ©   (2006-07-27 01:02) [30]

One bugs in cmd.exe

Create a file test.bat
@echo off
set a=%1 %2
echo "%a%"
set b=%*
echo "%b%"

Then run command
test.bat x=1 y=2


 
Суслик ©   (2006-07-27 02:35) [31]

было бы здорово, если бы появилась такая статья.
я использую приемы, которые Алекс как-то приводил на форуме.
Использую чистА copy-paste, но ценность информации о cmd от этого не страдает.

Вообще писать хорошую и логичную статью на данную теме имхо дело небладгодарное. А вот набрать примеров использования это было бы здорово.


 
Alex Konshin ©   (2006-07-27 03:16) [32]

Search file in PATH:

Create file with name which.bat
@echo off
set file=%~dp$PATH:1
echo %file%

Usage: which <filename>
Example: which ntdll.dll

Returns the full path to the directory where the specified files is found.
If the file is not found then you get the message
Echo is off.

Of couse you can change the bat file to fix this feature. I left it for your homework.


 
Alex Konshin ©   (2006-07-27 03:18) [33]

To read from standard input (console) use "set /p":
set /p boo=
echo boo=%boo%


 
easy ©   (2006-07-28 10:18) [34]

вот, попалось
Справочник по параметрам командной строки 1.1
http://doci.nnm.ru/u_meraba/27.07.2006/spravochnik_po_parametram_komandnoj_stroki_11/

http://dfc.com.ru/docs/cmd.zip (411 кб)


 
Jeer ©   (2006-07-28 10:52) [35]

Запуск chkdsk в диалоговом режиме

@echo off
rem chkdsk.cmd
setlocal
echo CHKDSK.CMD: Starting...
echo.
set _drive=
set _r=
set _f=
echo Please enter the drive, mount point or volume name to check (for example "c:")...
set /p _drive=Enter drive:
if "%_drive%" == "" goto _end
echo.
echo Do you want to fix errors on the disk *and*
echo locate bad sectors and recover readable information (Yes/No)...
:_recinp
set /p _r=Enter "y" or "n":
if "%_r%" == "" goto _recinp
if /I "%_r%" == "y" goto _go
if /I "%_r%" == "n" goto _fix
goto _recinp
:_fix
echo.
echo Do you want to fix errors on the disk (Yes/No)...
:_fixinp
set /p _f=Enter "y" or "n":
if /I "%_f%" == "" goto _fixinp
if /I "%_f%" == "y" goto _go
if /I "%_f%" == "n" goto _go
goto _recinp
:_go
echo.
echo ----------------------------------------------------------------
echo You have specified to check drive/volume %_drive%
echo.
echo With the following options:
if /I "%_r%" == "y" goto _pfix
if /I "%_f%" == "y" goto _pfix
goto _nofix
:_pfix
echo - Fix errors on the disk
:_nofix
if /I "%_r%" == "y" echo - Locate bad sectors and recover readable information (slow!)
echo ----------------------------------------------------------------
echo.
echo Start check disk? (Yes/No)...
:_startinp
set /p _s=Enter "y" or "n":
if /I "%_s%" == "" goto _startinp
if /I "%_s%" == "y" goto _run
if /I "%_s%" == "n" goto _abort
goto _startinp
:_run
if /I "%_f%" == "y" set _param=/f
if /I "%_r%" == "y" set _param=/r
set _param=%_drive% %_param%
echo Running: chkdsk.exe %_param%
chkdsk.exe %_param%
echo.
echo CHKDSK.CMD: Check disk done...
goto _end
:_abort
echo.
echo CHKDSK.CMD: Aborted...
:_end
pause
endlocal


 
pasha_golub ©   (2006-07-28 12:19) [36]

@echo off&SETLOCAL

FOR /f "tokens=1-4 delims=/-. " %%G IN ("date /t") DO (call :s_fixdate %%G %%H %%I %%J)

goto :s_print_the_date

:s_fixdate

if "%1:~0,1%" GTR "9" shift

FOR /f "skip=1 tokens=2-4 delims=(-)" %%G IN ("echo.^|date") DO (

set %%G=%1&set %%H=%2&set %%I=%3)

goto :eof

:s_print_the_date

echo Month:[%mm%]  Day:[%dd%]  Year:[%yy%]

ENDLOCAL&SET mm=%mm%&SET dd=%dd%&SET yy=%yy


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



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.048 c
4-1146644214
Zhekacoder
2006-05-03 12:16
2006.08.27
Как из Делфи узнать, что к компу подключена флэшка?


15-1154429606
Сергей М.
2006-08-01 14:53
2006.08.27
Win32-дебагер для Win16-приложений


15-1154216671
гастрит
2006-07-30 03:44
2006.08.27
Винт


15-1153994677
NeyroSpace
2006-07-27 14:04
2006.08.27
Можно ли вести автоматический подсчет количесва компиляций?


1-1152862358
serg_iv
2006-07-14 11:32
2006.08.27
директория программы по умолчанию





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский