2013-01-09 16 views
20

xlsファイルをxlsxファイルに変換する必要があります。バッチスクリプト - ディレクトリ内の各ファイルに対してコマンドを実行する

ssconvert inputFileName.xls outputFileName.xlsx 

(ssconvertはGnumericにのコマンドラインユーティリティである別のスプレッドシートのファイル形式の間で変換することができます)

I:私は正常にCMDプロンプト(Windowsの場合)に、このコマンドを実行して、XLSXへ1つのXLSファイルを変換することができますバッチファイルを書いて、指定されたディレクトリにFOR EACHファイルが入力と出力ファイル名の両方に現在のファイル名を使って上記のコマンドを実行するようにします。例えば

私は、ファイルのセットがあれば、:

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

/rで動作させることができませんでした。それを削除し、それは大丈夫だった。 –

+0

@BradIrby私はssconvertの代わりにjar-Konverterを実行するためにこれを使用しましたが、うまくいきましたので、あなたのdos cmd.exeにいくつかの問題があったかもしれません;-)。 – Sebastian

+0

FWIW/rは「再帰」を意味します(ここでは「%% vx」は「%% vを使用し、その後に文字xを追加する」という意味です) – rogerdpack

9

あなたは(このような何かを実行します.BATにコード怒鳴るを貼り付け、またはあなたはそれが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

実際には、これはWindows Vista以降かなり簡単です。マイクロソフトは、あなたの場合、このコマンドを使用して、唯一の奇妙なことがforfilesが自動的に@fileと@fname周りに二重引用符を追加することである

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

にコマンドFORFILES

を追加しました。とにかく動作するはずです

+0

引用符は他のコマンドと混乱するかもしれませんが、削除することができます(https://stackoverflow.com/a/32491884/5475891) – phflack

0

ディレクトリ内のすべてのcファイルをコンパイルするのと同じことをやっています。
別のディレクトリにあるファイルを反復処理するには、これを試してみてください。

set codedirectory=C:\Users\code 
for /r %codedirectory% %%i in (*.c) do 
(some GCC commands) 
関連する問題