2011-08-16 29 views
0

ファイルの名前を変更するバッチファイルまたはvbscriptを作成する必要があります。私はファイル名のすべてを2番目の "。"まで保持する必要があります。 2番目のドットの後に来るものを削除します。バッチファイルでPDFファイルの名前を変更する

これは、ファイル名がどのように見えるかのサンプルです:

nnnnnnnnnnnnnnnn.xxxxxxxx.dddddddddd.pdf 
  • n = 16番号0-9
  • x =この形式の例で日付:02232008
  • d = 10数字0-9、これは、削除するファイル名の一部です

上記のサンプルから削除する必要がありますが、残りのファイル名は同じにしてください。このバッチファイルを約3,000のpdfファイルを含むフォルダで実行できるようにする必要があります。同じフォルダにすぐに戻すか、別のフォルダに出力することができます。 VBScriptで

答えて

0

、あなたはあなたがこのようにバッチファイルでそれを実行します

' the file paths. hardcoded, but you could alternatively collect these via command line parameters 
Const IN_PATH = "path\to\directory" 
Const OUT_PATH = "path\to\another\directory" 

' check that the directories exist. you could create them instead, but here 
' it just throws an error as that's easier 
dim fso: set fso = CreateObject("Scripting.FileSystemObject") 
if not fso.FolderExists(IN_PATH) then 
    err.raise 1,, "Path '" & IN_PATH & "' not found" 
end if 
if not fso.FolderExists(OUT_PATH) then 
    err.raise 1,, "Path '" & OUT_PATH & "' not found" 
end if 

dim infolder: set infolder = fso.GetFolder(IN_PATH) 
dim file 
for each file in infolder.files 
    dim name: name = file.name 
    dim parts: parts = split(name, ".") 
    ' we're expecting a file format of a.b.c.pdf 
    ' so we should have 4 elements in the array (zero-indexed, highest bound is 3) 
    if UBound(parts) = 3 then 
     ' rebuild the name with the 0th, 1st and 3rd elements 
     dim newname: newname = parts(0) & "." & parts(1) & "." & parts(3) 
     ' use the move() method to effect the rename 
     file.move fso.buildpath(OUT_PATH, newname) 
    else 
     ' log the fact that there's an erroneous file name 
     WScript.Echo "Unexpected file format: '" & name & "'" 
    end if 
next 'file 

のようなものを使用することができ、ログファイルに出力をリダイレクト

cscript rename-script.vbs > logfile.txt 

これは、あなたが簡単に頼ることができることを前提としてい区切られた部分の書式の詳細ではなく、ファイル名の部分を区切る期間。


私はparts(1)配列要素であると思う日付を並べ替えるには、それが特定の形式でだから、あなたは、単に文字列の各ビットを抽出することができます。

'date in format mmddyyyy 
dim month_, day_, year_, date_ 
month_ = left(parts(1), 2) 
day_ = mid(parts(1), 3, 2) 
year_ = right(parts(1), 4) 
date_ = year_ & month_ & day_ ' now yyyymmdd 

ので、ファイル名を再構築、あなたは新しいフォーマットされた日付とparts(1)を置き換えることができ

dim newname: newname = parts(0) & "." & date_ & "." & parts(3) 
+0

このスクリプトは完全に機能します。助けてくれてありがとう。私が使用しなかったのはログファイルのみでした。この最後の作品は私のオートメーションを完成させるはずです。再度、感謝します。 –

+0

スクリプトのバリエーションをもう一度あなたの方法でスローすることができますか?私はこれらの名前が変更されたファイルを日付に基づいて並べ替えることができる必要があります。これを行う唯一の問題は、ファイル拡張子の日付部分が次の形式であることです。nnnnnnnnnnnnnnnn.dddddddd.pdfここで、ddddddddは(2009年1月23日)のようなものです。 2008年1月23日がある場合、これは日付に基づく順序でソートされません。これらを並べ替えるためには、最初の4日前の2009年または最後の4日を動かす必要があります。とにかくこれをやっているのが見えますか?別の区切り文字を持つ別のスクリプトを使用していますか? –

+0

うわー!!!信じられない。完璧です。このスクリプトは、sooooに多くの時間を節約しようとしています。本当にありがとう。 –

1
FOR /F "USEBACKQ delims=. tokens=1-4" %%F IN (`DIR /B /A-D "C:\Path\To\PDFs\"`) DO (
    REN "%%~fF.%%G.%%H.%%I" "%%F.%%G.%%I" 
) 

の場合期間の数が異なるファイルがあります。期間デリミタの数を数えて実行するだけの簡単な引数を追加するだけです。

+0

コマンドDIRがバッククォートで囲まれていることに注意してください – Mechaflash

0

StringSolver半自動リネームツールを使用して、最初のファイルの名前を変更し、一般化された名前の変更がOKであることを確認し、他のすべてのファイルでそれを受け入れます。

> move 123456789.02232008.1946738250.pdf 123456789.02232008.pdf 

説明ゲット:

> move 

免責事項:あなたは満足している場合

> move --explain 

the file name until the end of the second number + the extension 

は、あなたがmove --autoやsuccintバージョンを使用して半自動化ツールを実行することができますが私はこの自由なソフトウェアの共同著者は学術目的のために作った。

関連する問題