2013-01-09 39 views
20

Tôi cần chuyển đổi một số tệp xls thành tệp xlsx. Tôi thành công có thể chuyển đổi một file xls vào xlsx bằng cách chạy lệnh này vào cmd prompt (cửa sổ):tập lệnh batch - chạy lệnh trên mỗi tệp trong thư mục

ssconvert inputFileName.xls outputFileName.xlsx 

(ssconvert là tiện ích dòng lệnh của Gnumeric mà có thể chuyển đổi giữa các định dạng tập tin bảng tính khác nhau)

tôi muốn viết một tập tin batch cho FOR EACH tập tin trong một thư mục được chỉ định chạy lệnh tôi đã viết ở trên, sử dụng tên tập tin hiện tại cho cả đầu vào lẫn tên tệp đầu ra.

Ví dụ, nếu tôi có này tập hợp các tập tin:

c:\directory\file1.xls 
c:\directory\file2.xls 
c:\directory\file3.xls 

sản lượng nên được

c:\directory\file1.xlsx 
c:\directory\file2.xlsx 
c:\directory\file3.xlsx 

để mã giả hàng loạt nên có cái gì đó như

directory = c:\directory\ 
for (fileName in directory) 
    ssconvert fileName.xls fileName.xlsx 

Can có ai giúp tôi không?

Trả lời

25
for /r %%v in (*.xls) do ssconvert "%%v" "%%vx" 

một cặp vợ chồng đã người đã hỏi tôi để giải thích điều này, vì vậy:

Phần 1: for /r %%v in (*.xls)

Phần này trả về một loạt tệp trong thư mục hiện tại có tiện ích mở rộng xls. %% có thể hơi tò mò. Đây là đặc điểm cơ bản của ký tự đặc biệt % từ dòng lệnh được sử dụng trong% PATH% hoặc% TEMP%. Để sử dụng nó trong một tập tin thực thi, chúng ta cần phải thoát khỏi nó như sau: %%PATH%% hoặc %%TEMP%%. Trong trường hợp này, chúng ta chỉ đơn giản là thoát biến tạm thời v, nó sẽ giữ các tên tệp của chúng ta.

Chúng tôi đang sử dụng công tắc /r để tìm kiếm tệp đệ quy, vì vậy mọi tệp phù hợp trong thư mục con cũng sẽ được định vị.

Phần 2: do ssconvert "%%v" "%%vx"

phần thứ hai này là những gì sẽ được thực hiện một lần mỗi phù hợp với tên tập tin, vì vậy nếu các tập tin sau đây đã có mặt trong thư mục hiện hành:

c:\temp\mySheet.xls, c:\temp\mySheet_yesterday.xls, c:\temp\mySheet_20160902.xls

các lệnh sau đây sẽ được thực hiện:

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"

+0

Tôi không thể làm cho nó hoạt động với/r. Loại bỏ nó và nó đã được sử dụng tốt. –

+0

@BradIrby Tôi đã sử dụng nó để chạy một jar-Konverter thay vì ssconvert và nó đã làm việc tốt, vì vậy bạn có thể có một số vấn đề với dos cmd.exe ;-) của bạn. – Sebastian

+0

FWIW/r có nghĩa là "đệ quy" (và dường như hoạt động ok ở đây) ("%% vx" trong trường hợp này chỉ có nghĩa là "sử dụng %% v và thêm chữ x sau đó") – rogerdpack

9

bạn có thể chạy một cái gì đó như thế này (dán dưới mã trong một .bat, hoặc nếu bạn muốn nó chạy interractively thay thế %% bởi %:

for %%i in (c:\directory\*.xls) do ssconvert %%i %%i.xlsx 

Nếu bạn có thể chạy PowerShell nó sẽ là:

Get-ChildItem -Path c:\directory -filter *.xls | foreach {ssconvert $($_.FullName) $($_.baseName).xlsx } 
19

Trên thực tế điều này là khá dễ dàng kể từ Windows Vista.Microsoft hỗ trợ lệnh FORFILES

trong trường hợp của bạn

forfiles /p c:\directory /m *.xls /c "cmd /c ssconvert @file @fname.xlsx" 

điều kỳ lạ chỉ với lệnh này là forfiles tự động thêm dấu ngoặc kép quanh @file và @fname. nhưng nó sẽ hoạt động anyway

+0

Lưu ý rằng các dấu ngoặc kép có thể gây rối với các lệnh khác, [nhưng có thể bị xóa] (https://stackoverflow.com/a/32491884/5475891) – phflack

0

Tôi đang làm điều tương tự để biên dịch tất cả các tệp c trong một thư mục.
để lặp lại các tệp trong thư mục khác nhau, hãy thử điều này.

set codedirectory=C:\Users\code 
for /r %codedirectory% %%i in (*.c) do 
(some GCC commands) 
Các vấn đề liên quan