NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: 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)

 
Odpovědět
3.4.2017 17:32
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá 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.

Nahoru Odpovědět
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
Odpovídá 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.

 
Nahoru Odpovědět
3.4.2017 20:43
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá 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
Nahoru Odpovědět
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
Odpovídá 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

Editováno 3.4.2017 22:02
 
Nahoru Odpovědět
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é řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
7.4.2017 16:40
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá 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.

Nahoru Odpovědět
7.4.2017 20:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.