Batch programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


sonar
(addikt)
Blog

Ez a trükk megvan. Csak a példában egyszerűbb volt fix-en megadni.


sonar
(addikt)
Blog

Ismét én, egy anomáliával.

@echo off
SET "LOGFILE=d:\test.log"
SET "local_folders1=D:\Folder1 D:\Folder2 D:\Folder3 D:\Folder4"
SET "local_folders=%local_folders1% D:\Folder5 D:\Folder6 D:\Folder7 D:\Folder8"
FOR %%x IN (%local_folders%) DO (
IF EXIST %%x ECHO %%x >>%LOGFILE%
)

Nézegettem a logokat és legtöbbször csak a második SET tartalma van benne:
D:\Folder5
D:\Folder6
D:\Folder7
D:\Folder8

Kézzel lefuttatva akárhányszor csinálom mindig jó. :Y
Itt már megint mi a bánat van? :F


sztanozs
(veterán)
Blog

Nem vagyok benne biztos, de szerintem EnableDelayedExpansion-t kell hasznalni.
https://ss64.com/nt/delayedexpansion.html


sonar
(addikt)
Blog

Teszek egy próbát.
Elég egyszer beszúrni a batch elejére?


sztanozs
(veterán)
Blog

Igen eleg egyszer kiadni a
SETLOCAL EnableDelayedExpansion
parancsot, ha menet kozben ki akarod valamiert kapcsolni akkor kell csak a
SETLOCAL DisableDelayedExpansion
parancs. Viszont a valtozok hasznalatanal figyelni kell, hogy nem mindig %valtozo_nev%, hanem !valtozo_nev! formatumot is kell(het?) hasznalni.

[ Szerkesztve ]


Pöttön
(őstag)

Sziasztok!

Az egyik programnál amit használok egy ilyen bat-al indítom:

CLIP < CONNECT.TXT
start "reboot_launcher" "C:\Program Files\reboot_launcher\reboot_launcher.exe"

A connect.txt-ben egy ip cím van, így ezt automatán vágólapra helyezi.
A kérdésem az lenne, hogy ezt a vágólapra helyezést ezt lehet valmi parancsal késleltetni?
Pl hogy a bat file elindÍtása után 10-15 mp mulva helyezze a connect.txt tartalmát vágólapra?

A segítséget előre is köszi! :R


Pöttön
(őstag)

Köszönöm!
A timeout parancsal tökéletesen működik! :R


PioDVD
(senior tag)

Üdv!
Egy egyszerű problémát kellene megoldanom, de nem jövök rá - pedig tuti, hogy van megoldás.

Beolvasok egy paramétert, ami egy 4 jegyű szám.

Ha SET /A var = %1 (azaz numerikus a típusa), akkor tökéletes, ha nem 0-val kezdődik. Viszont ha 0-val kezdődik, akkor invalid number.

Ha SET var = %1 (azaz string a típusa), akkor viszont 0 értéket vesz fel.

Elvileg utóbbi kellene nekem, legyen string, abban ott kellene lennie a 0-nak az elején, de az egyáltalán nem működik.

Már kínomban az angol nyelvű oldalakat is bújtam, de egyszerűen semmi.

Nekem jó lenne számként is (0123 helyett 123), azt már ki tudnám pótolni, ha nem invalid numberre futna, de a string adná magát igazából.

Tudom, lehetne csak 3 (vagy 2, 1) számjegyet beadni, de nem túl elegáns, ráadásul lehet a 4 számjegy 0000 is, ott nem lenne mit beírni, így elcsúsznának a paraméterek (ez 4-ből az első paraméter).

Köszönöm, ha valaki megszán a megoldással. :)


sztanozs
(veterán)
Blog

Ha 0-val kezdodik, akkor a parancs oktalis szamnak ertelmezi, tehat a 8 es 9-es szamok ervenytelenek, raadasul az ertek tizes szamrendszerben is mas lesz:
01 (okt) = 1 (dec)
07 (okt) = 7 (dec)
010 (okt) = 8 (dec)

Itt van par jo megoldas:
https://stackoverflow.com/questions/14762813/remove-leading-zeros-in-batch-file

[ Szerkesztve ]


Sonja
(veterán)

Nagy segítség kellene. Még Linux alatt írtam pár shell script-et, amit most szeretnék átültetni batch-re.

Itt egy egyszerű ebook konvertálás bash scripte.

Eslőnek a paraméter vizsgálata van. Ha nincs paraméter megadva, akkor visszaadja a "Parameters required!" üzenetet.

Utána a pramétert "lebontom", hogy ki tudjam belőle nyerni a kiterjesztést. Ha ez PDF (átkonvertálva nagyra, tehát mindegy, hogy az ebook.pdf vagy ebook.PDF van megadva), akkor egy másik parancsot hajt végre és kilép. Ha nem PDF, akkor a ismét egy másik parancsot hajtja végre. Az ebook-convert-nek át kell adni a konvertált file nevét, és a konvertálandó file nevét kiterjesztéssel együtt, mert abból állapítja meg, hogy mire kell kovertálni.

Tehát az egész script lényege, hogy megadom pl. econv.sc ebook.mobi, akkor végrehajtódik az ebook-convert ebook.mobi ebook.epub parancs. Ha az econv.sc ebook.pdf parancsot adom meg, akkor ebook-convert ebook.pdf ebook.epub --no-image --unwrap-factor=0.1 parancs hajtódik végre.

Az ebook-convert parancssori program az ingyenes Calibre program része.

Tud valaki segíteni át-/megírni?! :F :B

Jó lenne esetleg valami doksi is (példákkal), hogy tanuljak, és magam is meg tudjam írni a többi scriptemet (nem nagy dolgok, hasonlóak mint ez). :K

Előre is köszönöm! :R

[ Szerkesztve ]


cigam
(félisten)
Blog

[bashconverter]

@echo off IF "%#%" "-eq" "0" ( echo "Parameters required!" exit "1" ) SET book=%~1 SET %~1bookext=%book% SET %~1%book%bext=%bookext% IF "%bext%" "=" "PDF" ( ebook-convert "%~1" "%1%.*%.epub" "--no-image" "--unwrap-factor=0.1" exit "1" ) ebook-convert "%~1" "%1%.*%.epub"

[ Szerkesztve ]


Sonja
(veterán)

Köszönöm, ezt próbáltam már. Sajnos rögtön az alábbi hibával leáll az elkészült .bat file! :( :R

"-eq" was unexpected at this time.


cigam
(félisten)
Blog

Azt sejtettem hogy nem ilyen egyszerű :B
A tutorialspoint elég jó kiinduló pont.
@echo off
if "%1"=="" goto :hiba
set fajlnev=%~n1
set kiterjesztes=%~x1
if kiterjeztes=="pdf" (start "ebook-convert %1 fajlnev+".epub" "--no-image" "--unwrap-factor=0.1")
exit
:hiba
echo "Nincs megadva paraméter"

Szinte biztos nem működik, de kb ilyen lenne batch-ben.

[ Szerkesztve ]


Sonja
(veterán)

Köszönöm a programot, és az oldalt! :R Így meg bírtam írni magamnak, kis "szépséghibával". Space nélküli fileokat kezel csak. :D Erre még nem jöttem rá, hogy mi a megoldás. Sajna a "valami file.mobi" vagy 'valami file.mobi' nem működik. :U Ez van. :)

Itt a batch file!


cigam
(félisten)
Blog

Amiben szóköz van, azt a fájlnevet idézőjelbe kell tenni, amiben nincs, annak meg mindegy. Szóval a fájlneveket tedd idézőjelbe.
ebook-convert "%1" %fn%".epub"


Sonja
(veterán)

Így se volt jó, de végül megoldottam! :D Itt a végleges ebook converteres batch file-om! :C Nagyon köszönöm a segítséget! :R


cigam
(félisten)
Blog

Igazán nincs, mit, de munka közben nem volt sok idő kigondolni, hogy pontosan mi lenne a jó, de remélem iránymutatásnak megtette. :B


PioDVD
(senior tag)

Kösz szépen!
Gyanús volt, mert 8-tól "őrült meg" de elhessegettem, mert miért is lenne 8-as számrendszer. :)


Sonja
(veterán)

Ha ezt a parancsot futtatom parancssorból, akkor szépen végre is hajtódik, minden probléma nélkül.

for %f in (*.webp) do magick -quality 95 "%~f" "%~nf.jpg"

Ha viszont beleteszem egy batch file-ba, akkor az alábbi hibaüzenetet kapom:

The following usage of the path operator in batch-parametersubstitution is invalid: %~nf.jpg"

For valid formats type CALL /? or FOR /?The syntax of the command is incorrect.

Mi lehet a probléma (és a megoldás)!? :F :U


cigam
(félisten)
Blog

A Batch fájlban egy % helyett (mindenhol?) kettő%% kel -» "%%~nf.jpg"


Sonja
(veterán)

:W Pedig még olvastam is ezt itt! :B Mind a 3 helyre kellett a +%. :K Köszi! :R


sonar
(addikt)
Blog

Ma azt hittem, hogy felrugom a windowst újra.

Kb 2hete szívok azzal, hogy ugyanaz a script 1 gépen a 8 ból nem fut le.
És folyamatosan az egyik net use-sal van gondja.
Hibaüzenet a klasszik: system error 87 the parameter is incorrect.
A mountolásos részt átrakva egy másik batch file-ba szépen lefut, kézzel lefut, eredeti batchfile-ból nem fut le.
Az az van amikor lefut ha egy net use /d -vel inditok akkor egy darabig jó. Teljes képzavar.
A poén, hogy a 2 mountolásból mindig csak egy kapcsolattal van gondja. Hiába cseréltem fel akkor is ugyanazzal az eléréssel volt gondja.
Amit kiderítettem, hogy előzőleg valaki fixen betűjelhez rendelte, de ki is törölte.
Ez még a registry-ben benne volt. Kitöröltem, de a helyzet nem lett jobb.

Majd kínomban fogtam és a script legelejére tettem és most jó. :Y
Mi a windows-os bánat baja lehet? Hívjak hozzá ördögűzőt?


sztanozs
(veterán)
Blog

Session problema lehet. Mostanaban a MS kavart valamit a session-okkel, mert en is tapasztalom, hogy az SMB kapcsolatok egy ido utan bontanak, es kell jo par masodperc (akar fel perc is), mig ujraepiti oket az OS.
Erdemes kiprobalni, hogy mount elott megprobalod bontani a kapcsolatot:
NET USE /delete \\UNC\path


sonar
(addikt)
Blog

Úgy van a script, hogy ha nem megy a mount akkor próbál egy delete-t és utána reconnect.
De hát nem megy. És mindig csak egy specifikus irányba.
Nem tudom, hogy a másik oldalon mi van. De megfordult a fejemben, hogy ott se minden kerek.

Egyébként úgy tűnik, hogy a SETLOCAL EnableDelayedExpansion -t ha a mount utánra teszem akkor jó.
Kíváncsi leszek, hogy 4-5 nap múlva mit tapasztalatok.

[ Szerkesztve ]


sztanozs
(veterán)
Blog

alternativakent probalj meg esetleg a \\szerver\share helyett eloszor egy \\szerver\ipc$-t (meghajtonev nelkul termeszetesen) hatha az segit.

[ Szerkesztve ]


cigam
(félisten)
Blog

Névvel, vagy ip-vel hivatkozol a szerverre? Nem lehet, hogy a névfeloldás bizonytalankodik?


sonar
(addikt)
Blog

IP cimmel van megadva.
És simán cmd-ből 10/10 jó. batchből meg nem.
8 gépből 1-en produkálja.


cigam
(félisten)
Blog

Itt elég vadnak tűnő megoldások vannak, de egy sfc /scannow nem árthat.
Nem piszkáltak még valamit a registry-ben?

[ Szerkesztve ]


sonar
(addikt)
Blog

Ez amit linkeltél ez a DISM-es problémára van, tegnap már belefutottam párszor.
Viszont ha a mount-ot ez elé viszem akkor jó: SETLOCAL EnableDelayedExpansion
(egy nap eredménye alapján)


sztanozs
(veterán)
Blog

valtozobol probalsz mountolni?


sonar
(addikt)
Blog

alapvetően változóból, de próbáltam, hogy direktbe írtam be és úgy sem ment.


Bekrepali
(csendes tag)

Üdv néktek profik!
Totál amatőrként szeretném kérdezni, hogy létezik e olyan automatikusan futtatható parancs, ami minden rendszerindítás után eltávolítja a hálózati kártyát az eszközkezelőből, majd visszacsatolja?
A probléma ami miatt ezt szeretném, a következő: A hálózati kártya nem indul megfelelően (tíz indításból kb. hatszor). Ellenben ha eltávolítom, aztán a hardverváltozások keresésére kattintok, akkor tökéletesen működik a következő rendszerindításig.


csadi0011
(őstag)

Powershell is jó?
Példa: Restart-NetAdapter -Name "Ethernet 1"

Feladatütemezőbe is berakhatod fájl nélkül.


Bekrepali
(csendes tag)

Köszönöm a gyors választ, de a letiltás/engedélyezés nem jó, mert "az eszköz nem indítható el" hibakód miatt nem ad netet. Viszont ha eltávolítom, aztán a hardverváltozások keresésére kattintok, akkor indul rendesen.


cigam
(félisten)
Blog

Nem kellene egy másik driver keresni hozzá?

[ Szerkesztve ]


Bekrepali
(csendes tag)

Talán sikerült a hibát orvosolni ezzel: [link]
Egyelőre nem tapasztaltam hibát. Mondjuk win 10 64bites rendszerem van, de kérdés nélkül frissített. 🤔
Amennyiben továbbra is szívózik, úgy takarítom is le a rendszert, és felkerül helyette egy windows 7.
Elvileg azon is eldöcög az Autocad.

üzenetek