По поводу командной строки в виндавс

Тема в разделе "WASM.HEAP", создана пользователем Cock, 14 авг 2007.

  1. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Может не правильный вопрос, но таки:
    как в виндавс с командной строки создать или редактировать переменую окружения?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    set ENV_NAME=ENV_VALUE
     
  3. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    n0name
    Спасибо
     
  4. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    **** mvenv.cmd *********
    Код (Text):
    1.    
    2.     SET key=%1
    3.     SET value=%2
    4.     SET %key%=%value%
    Скопируй этот файл в системную директорию.

    Теперь можешь запускать :

    Код (Text):
    1. с:\> mvenv myvar,1 // Помещаем в myvar единицу
    2. c:\> echo %myvar% // выведет единицу на экран.
    3. ...
    4. c:\> mvenv abc,%myvar% // Извлекаем из myvar и помещаем в abc. Теперь abc=1
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    лучше очистить key, value, после использования
    Код (Text):
    1. SET key=%1
    2. SET value=%2
    3. SET %key%=%value%
    4. SET key=
    5. SET value=
     
  6. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    n0name
    Не учел.

    ... можно было просто SET %1=%2

    PS.: Мне нравится, что ./mvenv через запятую работает:

    MVENV A,B

    синтаксис знакомый:)))

    ---------

    Тут можно еще досоображать:
    Реализовать на PHP или Shell такие вещи как stack и команды в винду pop и push. Также можно додумать простейшие арифметические операции... На PHP можно даже операции со сдвигом разработать... а предварительно описать:

    GLOBAL a,b,c,d; //
    GLOBAL asciistr; //

    Для скорости можно работать не с самими значениями переменных, а суказателями на их адрес, пересылая данные в a, b, c или d.
     
  7. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    n0name
    Зацени:

    Код (Text):
    1. <?php
    2. GLOBAL $a,$b,$c,$d;
    3.  
    4. GLOBAL $Source_Index, $Destination_Index, $LI;
    5.  
    6. GLOBAL $ARX;
    7.  
    8. GLOBAL $SA;
    9.  
    10. $ARX[0]=null;
    11. $SA[0]=null;
    12.  
    13. function mvenv ($where, $from){
    14.  
    15. $GLOBALS["$where"]=$from;
    16.  
    17. }
    18.  
    19. function mvenvl ($where, $from){
    20.  
    21. $GLOBALS["$where"]=$GLOBALS["$from"];
    22.  
    23. }
    24.  
    25. function addr ($index){
    26. return $GLOBALS["ARX"][$index];
    27. }
    28.  
    29. function _str($val){
    30.  
    31. $cnt = count ($GLOBALS["ARX"]);
    32.  
    33. $re = $cnt+1;
    34.  
    35. $GLOBALS["ARX"][$cnt]=$val;
    36.  
    37. }
    38.  
    39. function push ($what){
    40.  
    41. $cnt = count ($GLOBALS["SA"]);
    42.  
    43. $re = $cnt+1;
    44.  
    45. $GLOBALS["SA"][$re]=$what;
    46.  
    47.  
    48. }
    49.  
    50. function inl(){
    51. $GLOBALS["LI"]=count($GLOBALS["SA"]);
    52. }
    53.  
    54. function pop ($where){
    55.  
    56. $cn = $GLOBALS["LI"];
    57. $GLOBALS["$where"]=$GLOBALS["SA"][$cn];
    58.  
    59. }
    60.     $key = "My VALUE!!!";
    61.     _str ("hello, worldxxx!");
    62.     _str ("\n");
    63.     _str ("world hello!!!");
    64.     _str ($key);
    65.  
    66.  
    67.     mvenv ("a", addr (1));
    68.     echo $GLOBALS["a"];
    69.     mvenv ("a", addr (2));
    70.     echo $GLOBALS["a"];
    71.     mvenv ("a", addr (3));
    72.     echo $GLOBALS["a"];
    73.  
    74.    
    75.     push (addr(4));
    76.     inl();
    77.     echo $GLOBALS["LI"];
    78.     $value=null;
    79.     pop  ($GLOBALS["Destination_Index"]);
    80.     mvenvl ("a", "Destination_Index");
    81.     echo $GLOBALS["a"];
    82.  
    83.  
    84. ?>
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Кодить шелл-скрипты на рнр - это сильно.
     
  9. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    IceStudent
    А что?
    В начале файла - #!/usr/bin/php

    Потом - chmod +x myfile.php --

    Главное, чтобы работало.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    device
    Ну как по мне - рнр для другого предназначен. Да и под виндой полноценного шелл-скриптинга не получится - только сегодня провозился, пытаясь заставить работать команды "echo hello | script.pl". Так и не получилось - пришлось переписать как ехе. Хотя если кто подскажет более удобное решение, чем "echo hello | perl fullpath/to/script.pl", я был бы весьма благодарен.

    P.S. под bash всё работает.
    P.-P.S. скрипты зарегистрированы в реестре как command=perl.exe "%1" %*
     
  11. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    IceStudent
    Я на PHP инсталлеры даже пишу (self-extract bz2 архив).
    Поставь систему TopSERVER 2.0.
    У тебя будет в винде: /usr/bin/perl

    это раз, а два - если ты не юзаешь bash (win-реализацию), то пропиши: command=perl.exe "%1" (так по крайней мере у меня записано)

    Но при запуске скриптов, действительно требуются абсолютные пути. Вряд ли их можно обойти. Единственный вариант - писать cmd-файлы. Самый оптимальный вариант.
     
  12. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Возьми предыдущий листинг (#7) и назови его libstdscript.
    Дальше напиши следующую прогу:
    Код (Text):
    1. require ("libstdscript");
    2.  
    3. // Объявим строки
    4.  
    5.       _str    ( "Starting script..." );
    6.  
    7.       _str    ( $_SERVER["argv"][1]); //Полный путь к скрипту
    8.  
    9.       _str    ( $_SERVER["argv"][2]); // имя исполняемого файла
    10.      
    11.       _str    ("c:\\usr\\bin\\perl.exe"); //путь к интерпретатору
    12.  
    13.       _str    ($_SERVER["argc"]);
    14.  
    15.       mvenv    ("a", addr (4)); // Сохраняем путь к перлу в "a";
    16.       mvenv    ("b", addr (2)); // Сохраняем путь к скрипту в "b";
    17.       inl();                         //Обнуляем счетчики (LI)
    18.       $cmdx=sha1("com");
    19.       mvenv    ("Source_Index", "SET $cmdx=".$GLOBALS["a"]."\t".$GLOBALS["b"]."\t".$_SERVER["argv"][3]."\n%$cmdx%\n$cmdx=");
    20.       push    ($GLOBALS["Source_Index"]);
    21.       function nop(){}
    22.       addr    (5)>=2    ?       nop(): die ("Usage: **** ");
    23.       $op    =    fopen (addr(3).".cmd", "w");
    24.       fwrite       ($op, addr(1)."\n".$GLOBALS["LI"][1]);
    25.       fclose    ($op);
    Сохрани это как perlc

    команда: perlc c:\my\script.pl script
    создаст тебе исполняемый файл "script" -- ему точно никаких путе прописывать не надо!:)))
     
  13. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Да, забыл совсем - удали в Libstdscrip лишние строки, а то работать не будет!!!!
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    device
    А если на target-машине его не будет?

    Что это даст? Путь к перлу, как в никсах? Я и так его могу сделать, толку-то.

    Юзаю, в нём всё ок.

    Тогда дополнительные аргументы не будут передаваться, а мою проблему всё равно не решит.

    Для меня самый оптимальный вариант - делать как делал, а специфичные, но часто востребованные случаи переписывать в ехе :) А если какое-то выражение надо использовать раз-два, то набрать "bash" перед этим не так уж и трудно :)

    P.S. А рнр у меня нет.
     
  15. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Это проблемы target-пользователя


    Кто сказал, что не будут????
    Параметры cmdline (1) Лежат в argv[1]!!!

    Код (Text):
    1. split ("\t", argv[1]);
    2. //Не забывай про парсинг
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Я говорю.
    Код (Text):
    1. #perl -w
    2. print scalar @ARGV;
    Регистрируешь скрипт как ты сказал и пробуешь:
    Код (Text):
    1. >script.pl 1 2 3
    2. 0
    Разумеется, если написать "perl script.pl" 1 2 3, то всё ок, но такой вариант не устраивает, т.к. обычно я вообще пишу просто "script 1 2 3".
     
  17. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Теперь понятно.

    А то я ходел
    Код (Text):
    1. >./script.pl "1 2 3"
    Потом парсишь @ARGV по символу "\t";
     
  18. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    [offtop text="
    Как работает программа link.exe в win32???
    Не могу сообразить, кав винде вообще возможно создавать ссылки на файлы!
    " /]
     
  19. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Надеюсь, Вы коммерческими разработками не занимаетесь? Уж очень дилетантский подход. А если пользователь по принципиальным (идейным) соображениям, ни за что не захочет ставить PHP? (у меня его тоже нет, и не появится)
     
  20. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Линкер что ли? :) Знаю junction, ln (обе для создания символических ссылок на директории), cp -l (для жесткой ссылки между файлами).

    Или тебя интересует, как они работают? Так NTFS поддерживает это. Не знаю, как в FAT.