Valentínska akcia je tu! Získaj až 80 % extra kreditov ZADARMO na náš interaktívny e-learning. ZISTIŤ VIAC:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia: Porovnávanie reťazcov s medzerami. (Batch)

Aktivity
Avatar
Msprg
Člen
Avatar
Msprg:3.4.2017 17:32

Zdar,

tak, a už zas... :D ok, takže mám kód, ktorý by mal zistiť, či sa v premennej

%1

nachádza veta:

ECHO is off.

Alebo niečo iné.
Môj pokus o funkčný kód:

@echo off
echo %1
pause
if "%1" == "ECHO is off." (
goto DRAGnDROP
)
echo "ECHO is off." VALID
pause
exit

:DRAGnDROP
echo "ECHO is off." NOT VALID
pause
exit

Už iba doplním: Ak batch súbor, spustíte tak, že myšou "pretiahnete" (Drag-n-Drop) nejaký súbor na Batch súbor, do premennej %1 sa uloží cesta súboru. Ak ho ale spustíte dvojklikom, alebo inak, v premennej %1 sa bude nachádzať text "ECHO is off." (Bez úvodzoviek)

 
Odpovedať
3.4.2017 17:32
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovedá na Msprg
Honza Bittner:3.4.2017 19:31

Máš nějaký rozumný důvod se učit, či cokoli dělat, v batchi? Raději bych volil bash (.sh), který rozumně rozjedeš i na Windows.

Hore Odpovedať
3.4.2017 19:31
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Msprg
Člen
Avatar
Odpovedá na Honza Bittner
Msprg:3.4.2017 20:43

Naozaj chápem, čo tým chceš povedať. Samozrejme že sa chcem učiť aj iné (pre mňa nové) programovacie jazyky. niečo v bashi som už videl, skúšal editovať a viem že je dosť podobný batchu. Ale aj tak zatiaľ, z osobných dôvodov preferujem batch. Okrem toho, to ku čomu sa na tento (problém?) pýtam je, že práve pridávam nejaké tie featury ku môjmu už existujúcemu batchu, a zatiaľ nevidím dôvod, prečo to celé prepisovať do bashu alebo do iného programovacieho jazyka. (aj keď sa ten dôvod možno práve teraz našiel :D) Každopádne, týmto si mi s mojim problémom aktuálne vôbec nepomohol :-/ ale aj tak si cením tvoju ochotu, a snahu :-) .

P.S. bash sa dá rozbehať na widlách? :D To som nevedel.

 
Hore Odpovedať
3.4.2017 20:43
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovedá na Msprg
Honza Bittner:3.4.2017 21:22

batch snad nikdo nepoužívá, možná občas někdy něco na windows...

bash (a další shelly) jsou na linuxech a macích dost dobře podporované a většinou právě tak všude uvidíš .sh věci. Na windows se dají rozběhnout v různých programech jako MinGW, Cygwin, Git Bash, na Windows 10 je tam nově skvělý subsystém, ...

Opravdu nemá cenu se v batchi nějak učit, nebo něco vyvíjet. Majorita (s významem spíše "všichni") jeden na bash či obdobách. :-)

Tam bys to napsal nějak takto (nezkoušeno):

Nevím přesně odkud se bere tvá proměnná, ale budu předpokládat, že je to proměnná z 1. parametru skriptu, tj. z ./skript parametr1

if [ "$1" == "ECHO is off." ]; then
  echo "ECHO is off. VALID"
else
  echo "ECHO is off. NOT VALID"
fi
Hore Odpovedať
3.4.2017 21:22
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Msprg
Člen
Avatar
Odpovedá na Honza Bittner
Msprg:3.4.2017 21:59

Jeden z dôvodov prečo som batchi, je ten, že keď mi niečo treba, tak jednoducho vyberiem flashku, pripojim ku pc spustim skript, a ten sa už postará o všetko čo má. nepotrebujem vtedy doinštalovávať na každé pc, kde mi to treba žiadne runtimy, pluginy, knižnice, alebo iné programy (napr.: vyššie uvedené MinGW, Cygwin, Git Bash). Ide mi teda o jednoduchosť, efektívnosť, univerzálnosť a v podstate spoľahlivosť (myslím skôr tú, že som to napísal ja, a teda že to nieje žiadny blast).

Inak ak sa batch spustí Drag-n-Drop metódou, vyzerá to nejako takto:
C:\WINDOWS\sys­tem32\cmd.exe /c ""C:\Users\Msprg\Des­ktop\ECHO is off. validator.bat" "C:\Users\Msprg\Des­ktop\File.bin""

edit://
Hej, a mimochdom ja som

snad nikdo :-D

Editované
 
Hore Odpovedať
3.4.2017 21:59
Avatar
Msprg
Člen
Avatar
Msprg:7.4.2017 16:40

No, tak som si pomohol sám :-) .

Takže, čo sa stalo? Ja som si vlastne iba neporozumel s batchom. :D
%1 je vlastne parameter batchu pri spustení. No, a pri spustení batchu dvojklikom, je v %1 v podstate nič. Teda vlastne je tam textový reťazec s nulovou dĺžkou.
Okrem toho, sa nám treba ešte trošku lepšie pozrieť na to, ako vlastne funguje príkaz echo.
Echo je vlastne samostatný program, (tak isto, ako vlastne takmer všetky batchové príkazy) ktorý iba na výstupe vráti jeho prvý parameter. (echo ahoj! je spustenie programu "echo" s parametrom "ahoj!").
Ak ale program echo spustíme bez parametrov, tak proste iba vypíše aktuálny stav toho, či je echo zapnuté. (ak je pred príkazom echo bez parametrov príkaz

@echo off

vyhodí

ECHO is off.

)
Takže, kde bola chyba? Zase tam kde vždy, medzi stoličkou a klávesnicou. :D
Keď som spustil

echo %1

Tak som tým vždy vlastne iba spustil

echo

Vo výsledku som to teda nemohol porovnávať :D

Tu je teda funkčný, odskúšaný výsledok:

@echo off
setlocal enableextensions disabledelayedexpansion
if "%~1"=="" goto nothing
echo In %1 is something.
pause
exit

:nothing
echo In %1 is nothing.
pause
exit
Akceptované riešenie
+5 Skúseností
Riešenie problému
 
Hore Odpovedať
7.4.2017 16:40
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na Honza Bittner
Petr Nymsa:7.4.2017 20:14

Proč použít batch? Co třeba nějaké doplňující skripty po instalace vlastního produktu? Nějaký automatický úklid / build apod. Nevím k čemu bych to doplňoval dalším kusem SW abych rozběhal bash.

Z vlastní zkušenosti jsme měli prá PS / Batch skriptů po instalaci produktu, které provedli nějaké úkony na finální konfiguraci apod.

Hore Odpovedať
7.4.2017 20:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 7 správy z 7.