Saya perlu mengubah beberapa file xls menjadi file xlsx. Saya berhasil mengkonversi satu file xls menjadi xlsx dengan menjalankan perintah ini ke cmd prompt (windows):
ssconvert inputFileName.xls outputFileName.xlsx
(ssconvert adalah utilitas baris perintah Gnumeric's yang dapat mengkonversi antara format file spreadsheet yang berbeda)
Saya ingin menulis file batch yang UNTUK SETIAP file dalam direktori tertentu menjalankan perintah yang saya tulis di atas, menggunakan nama file saat ini baik untuk input maupun untuk nama file output.
Misalnya, jika saya memiliki kumpulan file ini:
c:\directory\file1.xls
c:\directory\file2.xls
c:\directory\file3.xls
keluarannya seharusnya
c:\directory\file1.xlsx
c:\directory\file2.xlsx
c:\directory\file3.xlsx
sehingga kode pseudo batch harus seperti
directory = c:\directory\
for (fileName in directory)
ssconvert fileName.xls fileName.xlsx
Adakah yang bisa membantu saya?
for /r %%v in (*.xls) do ssconvert "%%v" "%%vx"
beberapa orang telah meminta saya untuk menjelaskan hal ini, jadi:
Bagian 1: untuk /r %%v dalam (*.xls)
Bagian ini mengembalikan array file dalam direktori saat ini yang memiliki ekstensi xls
. %%
mungkin terlihat sedikit aneh. Ini pada dasarnya adalah karakter %
khusus dari baris perintah seperti yang digunakan dalam %PATH% atau %TEMP%. Untuk menggunakannya dalam file batch, kita perlu melarikan diri seperti ini: %%PATH%%
atau %%TEMP%%
. Dalam hal ini kita hanya mengescape variabel sementara v
, yang akan menampung array nama file kita.
Kita menggunakan switch /r
untuk mencari file secara rekursif, sehingga file apa pun yang cocok di folder turunan juga akan ditemukan.
Bagian 2: do ssconvert "%%v" "%%vx"
Bagian kedua inilah yang akan dieksekusi satu kali per nama file yang cocok, jadi, jika file-file berikut ini ada di folder saat ini:
c:\temp\mySheet.xls, c:\temp\mySheet_yesterday.xls, c:\temp\mySheet_20160902.xls
perintah-perintah berikut akan dieksekusi:
ssconvert "c:\temp\mySheet.xls" "c:\temp\mySheet.xlsx" ssconvert "c:\temp\mySheet_yesterday.xls" "c:\temp\mySheet_yesterday.xlsx" ssconvert "c:\temp\mySheet_20160902.xls" "c:\temp\mySheet_20160902.xlsx"
Sebenarnya ini cukup mudah sejak Windows Vista. Microsoft menambahkan perintah FORFILES
dalam kasus Anda
forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx"
Satu-satunya hal yang aneh dengan perintah ini adalah bahwa forfiles secara otomatis menambahkan tanda kutip ganda di sekitar @file dan @fname. tetapi seharusnya tetap berfungsi
Anda dapat menjalankan sesuatu seperti ini (tempelkan kode di bawah ini dalam .bat, atau jika Anda ingin menjalankannya secara interaktif, ganti %%
dengan %
:
for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx
Jika Anda dapat menjalankan powershell, maka akan menjadi:
Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx }