VBScript の利用に関してNo.07541
n'Guin さん 18/11/21 21:01
 
いつも大変お世話になっております。

デジカメで撮影したファイルの管理を、撮影日ごとにフォルダで分類しています。 
YYYY-MM-DD のフォルダを作成して、そこにデータをコピーしています。 秀丸ファ
イラーが、スクリプトとして、VBScript を利用できるのとわかり、とりあえず、次
のようなスクリプトで、フォルダが作成できるのを確認しました。 このスクリプト
をブックマークすると、ピクチャーのフォルダに、本日のフォルダができます。

さて、質問ですが、現況は、ピクチャーのフォルダに YYYY-MM-DD のフォルダ がで
きますが、秀丸ファイラが選択しているフォルダで、同様のフォルダを作成すること
は可能でしょうか? 自分の知識ではよくわからず、質問させていただきました。

よろしくお願いいたします。

--- 以下が、作成した vbs ファイルです。

' 宣言部
Dim ObjFso
Dim strFormattedDate

'yyyy/mm/dd hh:mm:ss 形式の文字列で現在日時を取得
strFormattedDate = Now()
 
'yyyy/mm/dd hh:mm:ss から yyyy/mm/dd 部分のみ抽出
strFormattedDate = Left(strFormattedDate, 10)
 
'yyyy/mm/dd から / を削除
strFormattedDate = Replace(strFormattedDate, "/", "-")
 

' MKDIR 本体
Set ObjFso=WScript.CreateObject("Scripting.FileSystemObject")
ObjFso.Createfolder("C:\Users\K********(ユーザー名です)\Pictures\"+strForm
attedDate)

Set ObjFso = Nothing
Set strFormattedDate = Nothing


[ ]
RE:07541 VBScript の利用に関してNo.07542
さん 18/11/21 21:32
 
 こんばんは、1ユーザーの陸といいます。

 普段のスクリプトはJScriptで書いているので、少し手間取りましたが、こんな感
じで同でしょう。
 いただいたスクリプトをもとに、下記の点を修正しています。

 1.該当スクリプトをダブルクリックとかで起動すると、うまく動かない可能性が
あるため、秀丸ファイラーClassic以外でこのスクリプトを実行したときにエラーを
表示するように修正。
 2.日付の取得を年、月、日をそれぞれ取得してからつなげるようにした。その方
が確実なので。
 3.要望のあった現在のディレクトリを取得して、そこにフォルダを作成する機能
を実装。

 以下、私が作成したスクリプトです。
 良ければ参考にしてみてください。
 また、スクリプトが少し長くなりましたが、お許しください。

--------------------
' 宣言部
Dim strNowYear
Dim strNowMonth
Dim strNowDay
Dim strFormattedDate
Dim strCurrentDir
Dim ObjFso

'秀丸ファイラーClassicから実行されたとき以外のためのエラー処理
strWScriptType = TypeName(WScript)
If LCase(strWScriptType) = "object" Then
  strMsg = _
    "このスクリプトは秀丸ファイラーClassic専用です。" & vbCr & _
    vbCr & _
    "「ブックマークの整理」または「ツールの整理」で「追加」して、" & _
    "パスの右側の「>>」ボタンの「スクリプトの参照」より、このファ" & _
    "イルを指定して登録してください。" & vbCr & _
    "(パスの先頭に「script:」と書かれたパスとして登録)"
  WScript.Echo strMsg
  WScript.Quit
End If

'現在の日付を取得
strNowYear = PadLeft(Year(Now), 4, 0)
strNowMonth = PadLeft(Month(Now), 2, 0)
strNowDay = PadLeft(Day(Now), 2, 0)

'yyyy-mm-dd 形式に成形
strFormattedDate = strNowYear+"-"+strNowMonth+"-"+strNowDay

'現在のディレクトリを取得
strCurrentDir = getDirectory()

' MKDIR 本体
Set ObjFso=CreateObject("Scripting.FileSystemObject")
ObjFso.Createfolder(strCurrentDir+"\"+strFormattedDate)

Set ObjFso = Nothing
Set strFormattedDate = Nothing

'桁数をそろえるための関数
Function PadLeft(stTarget, iLength, chOne)
Do While (Len(stTarget) < iLength)
stTarget = chOne & stTarget
Loop

PadLeft = Right(stTarget, iLength)
End Function
--------------------

 以上がスクリプトとなります。

 それでは。

[ ]
RE:07542 VBScript の利用に関してNo.07543
n'Guin さん 18/11/22 10:06
 
おはようございます。

陸様、素晴らしいスクリプトをありがとうございます。

さっそく使用してみて、期待通りに動くことを確認しました。
また、下手に実行しない機能もありがとうございます!

秀丸ファイラだけから実行できるようにして、しかも、HELP付き!!

ありがとうございます。


[ ]
RE:07543 VBScript の利用に関してNo.07544
さん 18/11/22 10:59
 
 こんにちは。

 うまくいったようでよかったです。

 それで、昨日メールを送信してから気づいたんですが、1か所エラー処理が抜けて
いました。
 例えば、コンピュータ(Windows10だとPC)のような現在のディレクトリが取得で
きない状態でこのスクリプトを実行すると、エラーも何も出ずに終了してしまうので、
その対策をしました。
 まあ、そんなことはめったにしないと思いますが。
 あと、一応フォルダがちゃんと作成されたかどうかチェックするようにして、作成
されていないようであれば、エラーを出すようにしました。

 ということで、よろしければ柿スクリプトに差し替えていただければと思います。

--------------------
'宣言部
Dim strNowYear
Dim strNowMonth
Dim strNowDay
Dim strFormattedDate
Dim strCurrentDir
Dim strDestDir
Dim ObjFso
Dim MB_ICONEXCLAMATION
MB_ICONEXCLAMATION = 48

'秀丸ファイラーClassicから実行されたとき以外のためのエラー処理
strWScriptType = TypeName(WScript)
If LCase(strWScriptType) = "object" Then
  strMsg = _
    "このスクリプトは秀丸ファイラーClassic専用です。" & vbCr & _
    vbCr & _
    "「ブックマークの整理」または「ツールの整理」で「追加」して、" & _
    "パスの右側の「>>」ボタンの「スクリプトの参照」より、このファ" & _
    "イルを指定して登録してください。" & vbCr & _
    "(パスの先頭に「script:」と書かれたパスとして登録)"
  WScript.Echo strMsg
  WScript.Quit
End If

'現在の日付を取得
strNowYear = PadLeft(Year(Now), 4, 0)
strNowMonth = PadLeft(Month(Now), 2, 0)
strNowDay = PadLeft(Day(Now), 2, 0)

'yyyy/mm/dd 形式に成形
strFormattedDate = strNowYear+"-"+strNowMonth+"-"+strNowDay

'現在のディレクトリを取得
strCurrentDir = getDirectory()

'コンピュータ等、現在のディレクトリを取得できなかったときにメッセージを表示
して、スクリプトを中断
If strCurrentDir = "" Then
message "現在のディレクトリを取得できませんでした。", MB_ICONEXCLAMATION
EndMacro
End If

'あとあと楽なように作成先のフォルダを変数に入れておく
strDestDir = strCurrentDir+"\"+strFormattedDate

'ディレクトリを作成
 Set ObjFso=CreateObject("Scripting.FileSystemObject")
ObjFso.CreateFolder(strDestDir)

'フォルダがちゃんと作成されているか調べて、作成されていなければエラーメッ
セージを表示
If ObjFso.FolderExists(strDestDir) = 0 Then
message "フォルダの作成に失敗しました。", MB_ICONEXCLAMATION
EndMacro
End If

Set ObjFso = Nothing
Set strFormattedDate = Nothing

'桁数をそろえるための関数
Function PadLeft(stTarget, iLength, chOne)
Do While (Len(stTarget) < iLength)
stTarget = chOne & stTarget
Loop
PadLeft = Right(stTarget, iLength)
End Function
--------------------

 それでは。

[ ]
RE:07544 VBScript の利用に関してNo.07545
n'Guin さん 18/11/22 14:11
 
こんにちは。

さらなるエラー処理をありがとうございます。
いい加減な私だと、手抜きをしてしまうところでした。

いろいろ勉強になりました。
ありがとうございました。

[ ]