Пакетны характар ​​бегчы на ​​^ | не працуе

^ | Павінна быць бегчы за | характар.

set good=Debug^|Win32

echo Incorrect paramets %good%

pause > nul

Чаму гэта дае мне памылку?

1

7 адказы

У вас ёсць два спосабу для ўстаўкі спецыяльных знакаў у зменнай. Ратуючыся іх:

set good=Debug^|Win32

або складаючы іх у двукоссі:

set "good=Debug|Win32"

Тым не менш, адзіны спосаб , каб правільна паказаць значэнне зменнай, якая змяшчае спецыяльныя сімвалы, выкарыстоўваючы запаволенае пашырэнне:

setlocal EnableDelayedExpansion
set good=Debug^|Win32
echo Incorrect paramets !good!
pause > nul
4
дададзена
Гэта працуе, але я не магу нічога зрабіць з тым жа самым, калі ...
дададзена аўтар Brans Ds, крыніца

Я спрабую дадаць некаторыя тлумачэнні да галоўнай праблеме.

Як адзначыў Джэймс Л., у вас ёсць чаканае ўтрыманне ў зменнай, але гэта праблематычна паўтарыць яго.

echo Incorrect parameters %good:|=^|%

Гэта праблема сінтаксічнага аналізу.
Пасля пашырэння адсотка спецыяльных сімвалы будуць апрацоўвацца, калі яны не замаскіраваныя карэткай або цытатай.

Шлях Джэймс Л. працуе толькі тады, калі ёсць толькі трубы, але ніякіх іншых спецыяльных знакаў у зменнай, так як вы не можаце замяніць два розных персанажаў такім чынам.

Але вы маглі б пазбегнуць ўсіх спецыяльных знакаў у два разы, як:

set good=Debug^^^|Win32^^^&Ampersand
echo Incorrect parameters %good%

ці ж

set "good=Debug^|Win32^&Ampersand"
echo Incorrect parameters %good%

This works, but the content of good is Debug^|Win32^&Ampersand which is in the most cases not wanted.

Шлях Aacini, каб выкарыстоўваць запаволенае пашырэнне заўсёды працуе з любым зместам, так як пасля отсроченного пашырэння зместу не будзе ў далейшым будзе прачытаны, таму спецыяльныя сімвалы бясшкодныя.
Гэта адна з галоўных пераваг затрыманага пашырэння аб пашырэнні адсоткаў.

Існуе яшчэ адзін спосаб выкарыстоўваць двукоссі, як рашэнне Axel Кемпер.

echo "Incorrect parameters %good%"

Але ў большасці выпадкаў двукоссі не павінны быць надрукаваныя.

3
дададзена
Гэта працуе. Дзякуй. Але я нічога не магу зрабіць з такім жа адзін у IF ... StackOverflow .com/пытанні/16801927/пазбегнуць сімвалаў-в-калі
дададзена аўтар Brans Ds, крыніца
+1 Я не разумею, чаму % добра: | = ^ |% </​​код> працуе. Я зрабіў некалькі тэстаў, і гэты метад працуе толькі як напісана, але пацярпець няўдачу, калі карэтка змяняецца якім-небудзь чынам: ^ | = | або ^ | = ^ | , або з < або <�код >> . Чаму | апрацоўваецца адрозніваецца ў гэтым выпадку? Дзякуючы ...
дададзена аўтар Aacini, крыніца
Ён працуе як працэнт замены фазы да спецыяльнай фазы знакаў. Так % добра: | = ^ |% </​​код> становіцца Debug ^ | Win32 непасрэдна перад спецыяльныя сімвалы і CARETS стаць якой-небудзь эфект
дададзена аўтар jeb, крыніца

Паспрабуйце выкарыстоўваць этыкетку.

У партыі, пазнакі папярэднічае двукроп'е.

:ok

гэта пазнака.

It is not necessary to usu the colon in a goto

goto ok
goto :ok

эквівалентныя.

1
дададзена
Смяці .. я пісаў на лета гэта таксама не працуюць
дададзена аўтар Brans Ds, крыніца
Дадаць новы варыянт гэтага да работ Дона »
дададзена аўтар Brans Ds, крыніца

выкарыстоўваць Усталёўка/р для вываду:

@echo off&setlocal
set "good=Debug|Win32"

выхад:

Incorrect parameters Debug|Win32
1
дададзена

Вы правільна пазбегла | сімвал на усталяваны добры = Debut ^ | Win32 . Пры рэха гэта, вы павінны замяніць | сімвал з кіруючай паслядоўнасцю, як гэта:

@echo off
set good=Debug^|Win32

echo Incorrect paramets %good:|=^|%

pause > nul

Гэта робіць яго рэха ўцяклі трубы ( ^ \ ) замест пякуча яго Win32 .

1
дададзена

Я б рэкамендаваў:

echo Incorrect paramets Debug^|Win32
pause > nul
0
дададзена

Наступныя працы па прызначэнні:

set good=Debug^|Win32

echo "Incorrect parameters %good%"

pause > nul

Калі апусціць двукоссі ў Эху заявы, Windows спрабуе выканаць «Win32», якое немагчыма.

0
дададзена