匿名質問者

txtファイルの任意の行を取り出して、同名のpdfファイル名の後ろに_を付けてリネームする、という処理を連続で行う方法を教えて下さい。バッチかvbsかpowershellでお願いしたいです。

例:
AAA.pdf
AAA.txt - 3行目にりんごとだけ書かれている
BBB.pdf
BBB.txt - 3行目にみかんとだけ書かれている


AAA_りんご.pdf
BBB_みかん.pdf

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2017/07/07 02:46:26

ベストアンサー

匿名回答1号 No.1

VBSで構成してみました。
下の内容を”~.vbs"として保存し、実行してみてください。
環境や条件について述べられていないので、適当に思うままにしています。
”連続で行う”のはどのような運用を考えられてるかわかりませんが、そして、異例なケースに対するエラー処理のこととか考えると対処はいろいろと出てきますが。


'
'<質問内容>
'
' txtファイルの任意の行を取り出して、同名のpdfファイル名の後ろに_を付けてリネームする、という処理を
' 連続で行う方法を教えて下さい。バッチかvbsかpowershellでお願いしたいです。
'
' 例:
' AAA.pdf
' AAA.txt - 3行目にりんごとだけ書かれている
' BBB.pdf
' BBB.txt - 3行目にみかんとだけ書かれている
' …
' ↓
' AAA_りんご.pdf
' BBB_みかん.pdf
' …
'

Set objFs = CreateObject("Scripting.FileSystemObject")

wkPath = objFs.getParentFolderName(WScript.ScriptFullName) & "\testFile"
' ↑ここでは、本vbsの収容のフォルダパスを取得している。さらにサブフォルダのパスとしていて、このフォルダを処理対象とするようにしている。

wkCnt = 0
If 1 = 2 Then
'個別に指定
Call syori_Unit("AAA")
Call syori_Unit("BBB")
Else
'フォルダ内の全pdfファイルを対象とする
Set objFolder = objFs.getFolder(wkPath)
For Each objFile In objFolder.Files
wkFile = objFile.Name
If LCase(Right(wkFile, 4)) = ".pdf" Then
wkMei = Left(wkFile, Len(wkFile) - 4)
Call syori_Unit(wkMei)
End If
Next
End If


MsgBox "終了  処理数:" & wkCnt



Sub syori_Unit(fileMei)
'取り扱いファイル名
pdfMei = fileMei & ".pdf"
txtMei = fileMei & ".txt"
'
'ファイルの存在を確認する
If Not objFs.fileExists(wkPath & "\" & pdfMei) Then
MsgBox "ファイルがみつかりません! " & vbCrLf & wkPath & "\" & pdfMei
Exit Sub
End If

If Not objFs.fileExists(wkPath & "\" & txtMei) Then
MsgBox "ファイルがみつかりません! " & vbCrLf & wkPath & "\" & txtMei
Exit Sub
End If

'
'テキストファイルから言葉を取り出す
Set objText = objFs.opentextfile(wkPath & "\" & txtMei)
wkText1 = objText.ReadLine
wkText2 = objText.ReadLine
wkText3 = objText.ReadLine
wkWord = wkText3
objText.Close
'
'新ファイル名を構成
newPdfMei = fileMei & "_" & wkWord & ".pdf"
'
wkCnt = wkCnt + 1
MsgBox wkCnt & vbcrlf _
& "wkPath = " & wkPath & vbCrLf _
& "pdfMei= " & pdfMei & vbCrLf _
& "txtMei = " & txtMei & vbCrLf _
& "newPdfMei = " & newPdfMei & vbCrLf
'pdfファイル名を変更する
Set objPdf = objFs.getfile(wkPath & "\" & pdfMei)
objPdf.Name = newPdfMei

End Sub

匿名質問者

ばっちりです!ちょこちょこ改造しつつ使わせていただきます。
ありがとうございました。

2017/07/07 02:46:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません