2013-01-09 34 views
20

मुझे कुछ xls फ़ाइलों को xlsx फ़ाइलों में कनवर्ट करने की आवश्यकता है।बैच स्क्रिप्ट - निर्देशिका में प्रत्येक फ़ाइल पर रन कमांड

ssconvert inputFileName.xls outputFileName.xlsx 

(ssconvert एक Gnumeric के आदेश-पंक्ति उपयोगिता है कि विभिन्न स्प्रेडशीट फ़ाइल प्रारूपों के बीच परिवर्तित कर सकते हैं)

मैं: मैं सफलतापूर्वक cmd शीघ्र (विंडोज़) में इस आदेश चलाकर xlsx में एक xls फ़ाइल परिवर्तित कर सकते हैं एक बैच फ़ाइल लिखना पसंद है कि किसी निर्दिष्ट निर्देशिका में प्रत्येक फ़ाइल के लिए इनपुट के लिए और आउटपुट फ़ाइल नाम के लिए वर्तमान फ़ाइल नाम का उपयोग करके ऊपर लिखा गया आदेश चलाता है।

उदाहरण के लिए, अगर मैं फ़ाइलों के इस सेट है:

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

उत्पादन होना चाहिए

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

तो बैच छद्म कोड की तरह

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

कुछ होना चाहिए कर सकते हैं कोई मेरी मदद करता है?

उत्तर

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

एक जोड़े को लोगों ने मुझसे पूछा है है यह समझाने के लिए है, तो:

भाग 1: for /r %%v in (*.xls)

यह भाग वर्तमान निर्देशिका में फ़ाइलों की एक सरणी देता है जिसमें xls एक्सटेंशन है। %% थोड़ा उत्सुक दिख सकता है। यह मूल रूप से कमांड लाइन से विशेष % वर्ण है जो% PATH% या% TEMP% में उपयोग किया जाता है। इसे बैच फ़ाइल में उपयोग करने के लिए हमें इसे से बचने की आवश्यकता है: %%PATH%% या %%TEMP%%। इस मामले में हम केवल अस्थायी चर v से बच रहे हैं, जो हमारे फाइलनामों की सरणी रखेगा।

हम /r फ़ाइलों का पुन: उपयोग करने के लिए स्विच का उपयोग कर रहे हैं, इसलिए बाल फ़ोल्डर्स में कोई मिलान करने वाली फ़ाइलें भी स्थित होंगी।

भाग 2: do ssconvert "%%v" "%%vx"

इस दूसरे भाग क्या, मिलान फ़ाइल नाम प्रति एक बार निष्पादित हो जाएगा, इसलिए यदि निम्न फ़ाइलों को वर्तमान फ़ोल्डर में उपस्थित थे:

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

निम्न कमांड होगा निष्पादित किया:

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

मैं इसे/आर के साथ काम करने के लिए नहीं मिला। इसे हटा दिया और यह ठीक था। –

+0

@BradIrby मैंने इसे ssconvert के बजाए एक जार-कनवर्टर चलाने के लिए उपयोग किया है और यह अच्छी तरह से काम कर रहा था, इसलिए आपको अपने डॉस cmd.exe ;-) के साथ कुछ समस्याएं हो सकती हैं। – Sebastian

+0

एफडब्ल्यूआईडब्ल्यू/आर का मतलब है "रिकर्सिव" (और यहां ठीक काम करना प्रतीत होता है) (इस उदाहरण में "%% vx" का अर्थ है "%% v का उपयोग करें और इसके बाद अक्षर x जोड़ें") – rogerdpack

9

आप (कुछ इस तरह चलाने के एक .bat में कोड bellow पेस्ट, या यदि आप यह interractively चलाना चाहते हैं की जगह ले सकता %%% द्वारा:

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

आप powershell चला सकते हैं यदि यह हो जाएगा:

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

असल में यह विंडोज विस्टा के बाद से काफी आसान है।माइक्रोसॉफ्ट अपने मामले

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

इस आदेश के साथ ही अजीब बात यह है कि forfiles स्वचालित रूप से @file और @fname को दोहरे उद्धरण चिह्नों कहते है में आदेश FORFILES

गयी। लेकिन इसे किसी भी तरह से काम करना चाहिए

+0

नोट करना चाहिए कि उद्धरण अन्य आदेशों के साथ गड़बड़ कर सकते हैं, [लेकिन हटाया जा सकता है] (https://stackoverflow.com/a/32491884/5475891) – phflack

0

मैं निर्देशिका में सभी सी फाइलों को संकलित करने के लिए समान काम कर रहा हूं। विभिन्न निर्देशिका में फ़ाइलों को पुनरावृत्त करने के लिए
इसे आजमाएं।

set codedirectory=C:\Users\code 
for /r %codedirectory% %%i in (*.c) do 
(some GCC commands)