Skrip batch Windows UnRar perlu mengabaikan .part02.rar melalui ekstensi part99.rar

2

Saya memiliki dua skrip batch windows yang berfungsi untuk mengembalikan folder tempat mereka ditempatkan, dan mengekstrak setiap file .rar ke folder file rar.

namun ketika folder menggunakan struktur:

file.part01.rar
file.part02.rar
file.part03.rar  ect..

skrip tersedak saat mencoba mengekstraksi masing-masing file ini (karena mereka cocok dengan ekstensi .rar) dan menyajikan kepada pengguna FileExtract.bla sudah ada: Timpa? (Ya Tidak ? X kali jumlah bagian arsip rar (sering 20 atau 30 kali).

Saya sudah mencoba mencari tahu bagaimana dalam skrip batch saya untuk pertama-tama menyaring file dengan ekstensi part02.rar ke part99.rar (tapi tidak part01.rar karena ini adalah file yang saya DO ingin ekstrak) sebelum diteruskan ke perintah "DO" / unrar.

berikut adalah dua file batch berbeda yang keduanya bekerja dengan cara yang sama (dan gagal dengan cara yang sama pada file part02.rar):

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
    FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
("C:\Program Files\7-zip\7z.exe" x "%%~a")
)

dan # 2:

@echo on
FOR /D /r %%F in ("*") DO (
    pushd %CD%  
    cd %%F
       FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x "%%X"
    )
popd
)

Terima kasih

James Gaul
sumber

Jawaban:

2

skrip tersedak saat mencoba mengekstraksi masing-masing file ini (sejak   mereka cocok dengan ekstensi .rar) dan menyajikan pengguna dengan FileExtract.bla   sudah ada: Timpa? (Ya Tidak ? X kali jumlah rar   bagian arsip (sering 20 atau 30 kali).

Kenapa tidak sekadar pipa "N" ke 7z perintah untuk memberitahu mereka memilih "N" opsi untuk "TIDAK" jika disajikan dengan itu?

Saya tidak yakin apakah perintah ini selalu dimulai dengan yang berlaku file.part01.rar pertama, dan kemudian pindah ke file.part02.rar, file.part03.rar, dan seterusnya secara berurutan, atau jika itu benar-benar bahkan penting untuk duplikat file yang diekstrak konten.

Jika otomatisasi ditahan hanya opsi ini yang akan dipilih ketika masalah ada, lalu pilih itu "N" Opsi secara otomatis harus memungkinkan file lain juga diekstraksi dan untuk otomatisasi selesai

Jadi masalahnya adalah file RAR ini dengan bagian [02-99] .rar nama file mengekstrak file yang sudah ada di mana mereka sedang diekstraksi sehingga meminta Anda ingin menimpa file yang ada atau tidak.

Jika itu mengekstrak 01 bernama file pertama dan kemudian mencoba semua nama file yang cocok berikutnya di mana ia memiliki file ekstrak menimpa konflik maka ini harus bekerja.

Jika ini berfungsi seperti yang diharapkan, maka itu akan membuatnya sangat sedikit perubahan dengan apa yang dibutuhkan dalam logika skrip batch Anda (lihat contoh di bawah).

# 1

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
    FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
(ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%~a")
)

# 2

@echo on
FOR /D /r %%F in ("*") DO (
    pushd %CD%  
    cd %%F
       FOR %%X in (*.rar *.zip) DO (
        ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%X"
    )
popd
)
Pimp Juice IT
sumber
Benar-benar memalukan jumlah waktu yang saya habiskan untuk mencoba memecahkan masalah ini, ada banyak kali saya bahkan berpikir tentang menulis sesuatu seperti auto-hotkey untuk terus mengirim keystroke "N" sebagai perbaikan kasar .... Saya hanya tidak bisa percaya saya tidak memikirkan solusi Anda. Itu bekerja dengan sempurna! dan ada di sana di depan wajah saya .. saya datang dari dunia linux di mana saya akan menyelesaikan ini lebih cepat, saya hanya tidak berpikir tentang menggunakan batch seperti itu. Terima kasih banyak!
James Gaul
StackExchange adalah komunitas yang indah. Saya mendorong Anda untuk menggunakannya lebih baik untuk pertanyaan dan jawaban karena Anda punya waktu untuk melakukannya. Saya senang Anda memperbaiki masalah Anda dan saya senang membantu!
Pimp Juice IT