CMD vs Batch

Azzal a problémával szembesültem Windows XP rendszer alatt, hogy szeretnék fájlokat kibontani batch állományból.

Parancssorban kipróbáltam:

7z.exe x -o"Program Files\Ide Tedd" Béna.zip

Figyeljétek az ékezetes betűt a fájlban!

Szépen lefut kicsomagolja a megadott könyvtárba a Béna.zip tartalmát. Na most jön a "jóság", ezt beírom egy kibont.bat fájlba és kirakom az ikonját az asztalra akkor bizony el kezd sírni, hogy nincs ilyen archívum és leáll a kicsomagolás hibaüzenettel.

Konkrétan az ékezetes fájlnevet nem tudja feldolgozni.

Na most megnéztem, hogy a dir /x mit mond a rövid 8.3-as fájlnévnek és beírtam így:

7z.exe x -o"Program Files\Ide Tedd" Bna~1.zip

Ez így tökéletes megoldás lenne, ha az a kis lenne nem lenne ott. Ugyanis ha a fájl pendrive-on van akkor a rövid név megegyezik a fájl "hosszú" nevével, tehát a dir /x az alábbi formát dobja vissza:

BÉNA.ZIP Béna.zip

Na most ezt hogyan bontsam ki ha ékezetes fájlnevet nem tudok megadni, mert ahogy nézem karakterkódolási hiba lép fel?

Lehet hogy triviális, de nem nekem :-)

Hozzászólások

Notepaddal írod be a bat-ba vagy copy connal?

up:
notepad-os BAT tartalma: béna
copy con-os BAT tartalama: b,na

A notepad dilin írja, egészen pontosan ANSI-ban, míg a CMD window az ASCII-ben megy. Ennyi a gond.

Amikor a számítástechnika ott tartott, hogy karakterkódoláson gondolkoztak a fejlesztők, akkor egyrészt érthető módon csak angolszász nyelvterületben gondolkoztak, másrészt az, hogy egy karakter egy vagy két byte, annyira nem mindegy, hogy éppen megkétszerezi a szövegfile-ok méretét. Anno ez azért annyira nem volt mindegy.
Én inkább azt nem értem, ha már létezik UNICODE és annak folyományaként az UTF8, miért nem lehet már vagy tíz éve azt használni?

Ave, Saabi.

B?na.zip vagy B*.zip, vagy akar *.zip is kell hogy mukodjon

Van még1 megoldás:

Megcsinálod notepad-ban, elmented UNICODE-ban, és CMD window-ban pedig tolsz egy ilyet
type unicode.bat > ascii.bat

És láss csodát! Vagy inkább nyomorultságot. :D

Továbbá megoldás ha:

batch.bat tartalma:
@echo off
7z.exe x -o"Program Files\Ide Tedd" %1

A parancsikon pedig ez:
X:\PATH\TO\BATCH\batch.bat "béna.zip"

így elkerülöd a karakterkódolást.

Hogy is van az, hogy a Windows GUI 1250-es, a DOS/CMD 852-es codepage-t használ? :-)
Azt mondjuk nem tudom, hogy a filenevek melyik CP szerint kerülnek tárolásra.

Ave, Saabi.

Szerintem csak az XP-nél. Vistán létrehoztam egy BÉNA.txt nevű file-t Windows Explorerben, majd kilistáztam cmd és PowerShell alól:

cmd.exe:


C:\Users\saabi>dir *.txt
 Volume in drive C is PC COE
 Volume Serial Number is 8A8B-E13B

 Directory of C:\Users\saabi

04/20/2010  21:26                 0 BÉNA.txt
               1 File(s)              0 bytes
               0 Dir(s)  72,217,784,320 bytes free

C:\Users\saabi>

PowerShell:


PS C:\Users\saabi> Get-ChildItem BÉNA.txt


    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Users\saabi


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         4/20/2010   9:26 PM          0 BÉNA.txt


PS C:\Users\saabi>

Ugyanakkor cmd.exe alatt ha futtattam a bena.bat-ot:


C:\Users\saabi>type bena.bat
copy lipsum.txt B╔NA.txt
7z.exe -a B╔NA.zip B╔NA.txt

C:\Users\saabi>bena.bat

C:\Users\saabi>copy lipsum.txt B╔NA.txt
        1 file(s) copied.

C:\Users\saabi>7z.exe -a B╔NA.zip B╔NA.txt


Error:
Incorrect command line

C:\Users\saabi>

Az bizony sikertelen. A PowerShell Get-Content parancsa viszont normálisan listázza a file tartalmát, talán a batch file futtatása sem okozna neki gondot. Nekem viszont nem volt hajlandó futtatni, én meg nem tudom hogyan vehetném rá.
Összességében, ha nekem kellene ezt a feladatot megoldani, akkor PowerShell felé tapogatóznék, mert a cmd.exe-nek nagyon nem megy a CP1250.

Ave, Saabi.

Tiszteletem!

Apróság, ami a témába vágna.:

win2003 R2 Eng.-n diruse-el, local gépen szeretnék egy ékezetes mappa tartalmat "megszámoltatni", sajnos sikertelenül.

Idevágó rész.:

cd e:\ékezetes
c:\Progra~1\suppor~1\diruse /* /m e:\ékezetes > e:\idementeni

Minden egyéb nem ékezetes path-al megy, megosztással, mappelt cuccokkal, stb...

Valakinek tipp?

Köszi

udv
letix

-----------------------------------------
Linux alapparancsok, kezdőknek