Куча говна / Говнокод #14516 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
@echo off

set PROGPATH="%ProgramFiles%\MyProg"

rem И тут мы захотели проверить, существует ли наша папочка

if not exists "%PROGPATH%" (
    mkdir "%PROGPATH%"
)

rem виндовый шелл как бы нам говорит "братюнь, погоди, не спеши"
rem ""C:\Program was unexpected at this time.

Патч:

-set PROGPATH="%ProgramFiles%\MyProg"
+set "PROGPATH=%ProgramFiles%\MyProg"


http://stackoverflow.com/questions/535975/dealing-with-quotes-in-windows-batch-scripts

Запостил: Elvenfighter Elvenfighter, (Updated )

Комментарии (22) RSS

  • Поциент в курсе, что команды "exists" не существует?
    Ответить
    • Поциенту требуется курс моральной реабилитации после поиска этого бага.
      Ответить
      • Реабилитация после написания батников полагается в любом случае 😉

        Хотя бы молоко за вредность должны выдать.
        Ответить
        • Да там жесть. Если надо запустить какую-то внешнюю программу, а ты не знаешь, будет ли это нормальный .exe или другой .cmd, нужно обязательно писать "call something". Потому что если ты напишешь "something", и этот something окажется "something.cmd", твой скрипт закончится сразу же после вызова (ну как будто бы написали exec ./something.bat).
          Я в свое время очень много времени потерял, чтобы понять, что я напоролся на эту "фичу".
          Ответить
          • А еще там есть замечательное заклинание setlocal enabledelayedexpansion разрешающее использование !переменных!, без которых с циклами нормально не поработать, т.к. все %переменные% подставляются в цикл один раз перед его стартом...
            Ответить
            • На самом деле, на cmd можно почти нормально писать - с циклами, функциями. Просто как этот пиздец выглядит...
              Ответить
              • Ну вот с тем заклинанием - можно. Я даже писал. Но это программирование на set'е и for'е очень бесит. Тот же bash хоть и упорот по-своему, но все же на порядок удобней.
                Ответить
                • я один раз пробывал на баше. Затем освоил питон в пределах чтоб скрипты писать, и более не знаю проблем питон на линуксе есть всегда. На винду тоже поднимается тоже легко.
                  Ответить
                    • Зато нормальный язык с нормальными строками, нормальными циклами, нормальными списками, нормальной передачей аргументов в запускаемые процессы, нормальной работой с файлами. Не надо думать о кавычках, экранах, о том как аргументы разобьются, как включить delayedexpansion, как отрезать имя файла от полного пути и т.п. Куча либ в наличии, хочешь - отправляй мыло о завершении или ошибке, хочешь - по хттп что-то скачивай...

                      Короче питон по удобству и скорости написания скриптов порвет как тузик грелку все эти баши и тем более батники.

                      Один недостаток по сравнению с батниками - под виндой его надо ставить. Но с другой стороны ставить его один раз.
                      Ответить
  • Да, на грабли с кавычками я уже тоже наступал. В отличие от питуха, кавычки не исчезают после интерпретации шеллом, программы должны убирать их сами. Пруф:
    >find asd
    FIND: Неправильный формат параметра
    
    >find "asd"
    работает


    >+set "PROGPATH=%ProgramFiles%\MyProg"
    +set PROGPATH=%ProgramFiles%\MyProg
    Кавычки не нужны совсем.

    Алсо в батниках нужно использовать %~1 вместо %1, тогда батники не будут ломаться, если в параметре будут кавычки. За это ставьте мне большой плюсик, совет много нервов экономит.
    Ответить
    • А %~p1 как правильно использовать? Если не ошибаюсь, в WinXP в конце нет "\", а в Win7 есть, или наоборот.
      Ответить
      • Просто, скажем, вместо %1%2 используешь "%~1%~2" и оно будет работать вне зависимости от пробелов и кавычек в параметрах.
        Ответить
        • Не, я именно про %~p1. Скажем, есть у меня в %1 хрень вида c:\my\path\file.txt и я делаю copy %1 %~p1\backup.bak или %~p1backup.bak, и в каком-то случае это ломается в одной из ОС.
          Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8