2014-03-11 4 views
1

Я хочу установить "var3=%(title)s.%(ext)s" Но окна продолжает интерпретировать %(title)s.%(ext)s как (ext)s вместо %(title)s.%(ext) есть способ, чтобы «установить» в буквальном смысле без ЦМД интерпретируя его?Как установить переменные буквально в пакетном режиме?

EDIT Кто-то хотел, чтобы увидеть весь сценарий

cd C:\youtube-dl 
youtube-dl -U 
echo Remember to press enter only AFTER update is complete 
pause 
set /p "var1=Enter URL: " %=% pause 
set "var2=%date:/=-%" 
set /p var3=%(title)s.%(ext)s 
youtube-dl "%var1%" -ci -o C:\Users\Admin\Desktop\Music\Download_dl\%var2%\%var3% -f best -x -- no-mtime --add-metadata --write-thumbnail 
cd C:\Users\Admin\Desktop\Music\Download_dl\%var2% 
del *.mp4 
+0

Вы хотите запросить var3 ? 'set/p' –

ответ

1

Чтобы сохранить большинство специальных символов в пакете, заключите их в котировки. Это предотвратит потерю большинства или перевод их в особый смысл. Однако для % в пакетных файлах он должен быть экранирован сам по себе %%.

@echo off 
setlocal 
cd C:\youtube-dl 
youtube-dl -U 
echo Remember to press enter only AFTER update is complete 
pause 
set /p "var1=Enter URL: " %=% pause 
if defined var1 set "var1=%var1:"=%" 
set "var2=%date:/=-%" 
set "var3=%%(title)s.%%(ext)s" 
youtube-dl "%var1%" -ci -o "C:\Users\Admin\Desktop\Music\Download_dl\%var2%\%var3%" -f best -x -- no-mtime --add-metadata --write-thumbnail 
cd "C:\Users\Admin\Desktop\Music\Download_dl\%var2%" 
del *.mp4 
endlocal 

Изменения

  • контекстные переменные с SETLOCAL/Endlocal
  • удален яд символ котировочных из пользовательского ввода
  • вложенных текстовых строк в кавычках
+0

Почему вы «@echo off» «setlocal "и" если определено var1 set "var1 =% var1:" =% хотя? Извините, я новичок в этом ... Но теперь работает скрипт – user3407161

+0

'@echo off' предотвращает отображение команд при запуске' setlocal 'является хорошей практикой, чтобы ограничить ваши переменные вашим скриптом и не влиять на текущий текущий сеанс командной строки, и' если определено var1 set "var1 =% var1:" =% "' удаляет двойные кавычки (если есть) из пользовательский ввод, чтобы предотвратить сбой сценария. –

+0

Извините, я не совсем понял, как это определено ...функция работала – user3407161

1

В пакетных файлах, % имеет особое значение. В коде

set "var3=%(title)s.%(ext)s" 
      ^.........^ 

указанные знаки процента являются разграничение имени переменного с именем (title)s.. И эта переменная не определена (я полагаю, из вашего производства), так что вы получите

set "var3=(ext)s" 

Вам нужно бежать знаки процента, чтобы получить желаемый результат

set "var3=%%(title)s.%%(ext)s" 
+0

Вот что происходит, когда я использую этот [Input] C: \ Users \ Admin> set" var3 = %% (title) s. %% (ext) s " C: \ Users \ Admin >% var3% '%%' не распознается как внутренняя или внешняя команда, операционная программа или командный файл. – user3407161

+0

@ user3407161 Пожалуйста, покажите весь скрипт. Вы просто вызываете '% var3%' как команду? Если вы хотите отобразить его значение, вам нужно использовать 'echo% var3%'; в противном случае командная строка пытается выполнить значение '% var3%'. –

+0

@ user3407161, код отправлен предназначен для использования в пакетных файлах. Из командной строки двойные процентные знаки не нужны. В любом случае, в новом опубликованном коде, измените свой 'set/p var3 = ...' на 'set 'var3 = %% (title) s. %% (ext) s" 'и изменив на -o" c: \ .... "' (с кавычками) должны решить проблемы. –

Смежные вопросы