Değişken değişkenli 7-zip komut satırı için hata durumu nasıl yazılır (ya da bunun yerine metin dosyasına)


5

Bir dizini paketlemek ve e-postayla arşiv göndermek için 7-zip (toplu iş dosyalarımda) kullanıyorum. Bu dizinde bazı dosyaları aynı anda kullandığımda toplu iş dosyası çalışıyor (Toplu iş dosyalarını Görev Zamanlayıcı ile başlatıyorum), işlem sırasında uyarı mesajları görüyorum. Bundan sonra, arşiv hazır olduğunda, 7-zip şöyle bir mesaj görüntüler: E-postayı göndermeden önce "UYARI: 29 dosya açılamıyor". Bu olduğunda, %MESSAGE%"29 uyarı devam ediyor" değerine sahip bir ortam değişkeni (benzeri bir şey ) ayarlayabilmek ve bu mesajı e-posta konusuna koymak istiyorum. Ancak şu anda yapabilecek tek şey %ERRORLEVEL%değişkeni kullanmaktır . Bir %MESSAGE%değişkeni ayarlayamazsam , bir dosyaya uyarı mesajları yazmak, ardından son satırı çıkarmak için bu dosyayı ayrıştırmak mümkün mü?

Yanıtlar:


7

7-Zip Komut Satırı Sürümünü (7za.exe) kullanmanızı öneririm .

Aşağıdakine benzer bir komut tüm çıktıları (stderr dahil) Log.txt dosyasına yönlendirir :

7za a Test.7z *.* >Log.txt 2>&1

Ek olarak, 7-Zip,% ERRORLEVEL% ile toplu iş dosyanızda kullanabileceğiniz aşağıdaki çıkış kodlarını döndürür:

0 = Hata yok.

1 = Uyarı (Önemli olmayan hatalar). Örneğin, bir veya daha fazla dosya başka bir uygulama tarafından kilitlendi, bu yüzden sıkıştırılmadılar.

2 = Ölümcül hata.

7 = Komut satırı hatası.

8 = İşlem için yeterli hafıza yok.

255 = Kullanıcı işlemi durdurdu.


Düzenleme: Tüm bu Compressing <filename>satırları içeren böyle ayrıntılı bir günlük istemiyorsanız , bunun yerine bu komutu kullanın:

7za a Test.7z *.* | findstr /i /v "pavlov scanning compressing" >Log.txt 2>&1

(Yukarıdaki anahtarlarla bulunan findstr komutu, tırnak işaretleri içindeki kelimeleri içeren tüm satırları hariç tutar.)


teşekkürler,% errorlevel% istediğim kadar esnek değil >xxx.log 2>&1, neredeyse ihtiyacım olduğu. neredeyse - log dosyası sooooo büyük olacağı için ... arşivimde çok fazla dosya var, 100k'ın üzerinde ... ama iyi bir fikir, i ll trying to use it for brainstorm tomorrow =) can you spell out what is it - 2> & t understand it fully? how it work? by the way, i1` 7z.exe yerine 7za kullanmıyorum, fakat farketmez, bu programlar arasında bir fark görmüyorum
slesar.mira

>Log.txt 2>&1Hem standart çıktıyı (= 1) hem de standart hata (= 2) akışlarını Log.txt dosyasına yönlendirecektir ( daha fazla bilgi için buraya bakınız ). Ayrıca, sanırım 7z.exe'yi de kullanabilirsiniz, sadece komut satırından kullandığımda 7za.exe'yi tercih ediyorum.
Karan

1
7-zip'in stderr'e bir şey yazdığını sanmıyorum.
martineau

harika bağlantı , tekrar teşekkür ederim! =)
slesar.mira

@martineau: Belki de değil, ama bu fazladan 2> & 1 orada yönlendirilen herhangi bir şeyin yakalanmasını sağlayacak. Uygulama, normalde (ayrıca, neden? IMO değil stderr'e yazmaz bile, kesin eklemeden zarar gelmez gerektiğini yerine stdout stderr hataları yönlendirmek).
Karan

1

7-Zip , hata ve uyarı mesajları dahil olmak üzere tüm mesajlarını stdout'a yazar . Bu, stdout'u bir dosyaya yönlendirerek tüm çıktıları toplayabileceğiniz anlamına gelir. Bu, >output_filename7-Zip'e geçtiğiniz her argümandan sonra komut satırına ekleyerek yapılabilir . Örneğin:

7z args... >output_filename

Bundan sonra, çıktı dosyasını ayrıştırabilmeli ve "UYARI" ya da içindeki her ne ise satırları arayabilmelisiniz. Bunu şartlı olarak %ERRORLEVEL%sıfır olmayan bir değerin , yani bir sorun olduğunu veya bunun için 1ölümcül olmayan uyarılar olduğu anlamına gelip gelmediğine bağlı olarak yapabilirsiniz .

Belgelere göre bunlar olası çıkış kodlarıdır ( %ERRORLEVEL%değerler):

Kod Anlamı
==== =======
0 Hata yok
1 Uyarı (Ölümcül olmayan hatalar). Örneğin, bir veya daha fazla dosya
            başka bir uygulama tarafından kilitlendi , bu yüzden sıkıştırılmadılar.
2 Önemli hata
7 Komut satırı hatası
8 İşlem için yeterli hafıza yok
255 Kullanıcı işlemi durdurdu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.