NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

REname.VBS V1.00 (C) [email protected] 2004-04-15

正規表現でファイル名/フォルダ名を変えるVBScript

1. 目的、用途

RENAMEコマンドで出来ないのは、ファイル名を縮めたり、伸ばしたり、
文字の位置をずらしたり、ができないこと。
例えば、
LIST1.TXT〜LIST9.TXTをLIST01.TXT〜LIST09.TXTに。
030101.LOG〜031231.LOGを20030101.LOG〜20031231.LOGに。
そういうのは、やはり正規表現でしょう。

2. 使用方法

Windows98/ME
Start REname.VBS dir pattern newname
Start REname.VBS pattern newname
Start REname.VBS dir
Start REname.VBS

Windows2000/XP
REname dir pattern newname
REname pattern newname
REname dir
REname

GUIでは、
ダブルクリックすると4番目の形式、
ディレクトリをドロップすると3番目の形式
となります。

dir 対象フォルダ
dirの指定がないときは、カレント。
pattern 正規表現
newname 置換文字列
pattern newnameの指定がないときは、InputBoxから入力します。

確認のため、以下の形式のリストをNotePadで表示します。
旧ファイル名1
新ファイル名1
(空行)
旧ファイル名2
新ファイル名2
(空行)
〜〜〜

MsgBox「To Rename ?」にOKかCancelを答える。
OKでリネームを実行します。Cancelは取り止めます。

リストのファイルは念のためテンポラリフォルダに一応残りますが、
もし必要ならNotePadを終了する前に名前を付けて保存してください。

3. 補足

例えば、
LIST1.TXT〜LIST9.TXTをLIST01.TXT〜LIST09.TXTに。は、
REname LIST(.).TXT LIST$1.TXT

030101.LOG〜031231.LOGを20030101.LOG〜20031231.LOGに。は、
REname (.*).LOG 20$1.LOG

正規表現や置換文字列の詳細はWSHのヘルプを参照してください。

' REname.VBS V1.00 (C) [email protected] 2004-04-15
' Regular Expression reName
' Usage: REname.VBS dir pattern newname

Option Explicit
Dim fso
Dim wShell
Dim re
Dim dir
Dim from,toName
Dim Folder
Dim File
Dim fname
Dim ans
Dim dic
Dim keys
Dim list
Dim TempName

Set fso=CreateObject("Scripting.FileSystemObject")
Set wShell=CreateObject("WScript.Shell")
Set re=CreateObject("VBScript.RegExp")
Set dic=CreateObject("Scripting.Dictionary")

Select Case(WScript.Arguments.Count)
Case 0,1:
If WScript.Arguments.Count>0 Then
Set Folder=fso.GetFolder(Wscript.Arguments(0))
Else
Set Folder=fso.GetFolder(".")
End If
from=InPutBox("Pattern",WScript.ScriptName,"")
If IsEmpty(from) Then
WScript.Quit
End If
toName=InPutBox("New name",WScript.ScriptName,"")
If IsEmpty(toName) Then
WScript.Quit
End If
Case 2:
Set Folder=fso.GetFolder(".")
from=WScript.Arguments(0)
toName=WScript.Arguments(1)
Case 3:
Set Folder=fso.GetFolder(Wscript.Arguments(0))
from=WScript.Arguments(1)
toName=WScript.Arguments(2)
Case Else:
WScript.Quit
End Select

re.Pattern="^" & from & "$"
re.IgnoreCase=True

TempName=fso.BuildPath(fso.GetSpecialFolder(2).Path,fso.GetTempName())
Set list=fso.CreateTextFile(TempName)

For Each File In Folder.SubFolders
If re.Test(File.Name) Then
fname=re.Replace(File.Name,toName)
dic.Add File,fname
list.WriteLine File.Name
list.WriteLine fName
list.WriteBlankLines 1
End If
Next

For Each File In Folder.Files
If re.Test(File.Name) Then
fname=re.Replace(File.Name,toName)
dic.Add File,fname
list.WriteLine File.Name
list.WriteLine fName
list.WriteBlankLines 1
End If
Next

list.Close
wShell.Run("NotePad """ & TempName & """")

ans=MsgBox("To Rename ?",vbOkCancel,WScript.ScriptName)
If ans=vbOK Then
keys=dic.Keys
For Each File In keys
Call Rename(File,dic.Item(File))
If Err<>0 Then
ans=MsgBox(File.Name & " -> " & dic.Item(File) & vbCRLF & Err.Number & vbCRLF & Err.Description,vbOkCancel,WScript.ScriptName)
If ans=vbCancel Then
WScript.Quit
End If
End If
Next
End If

WScript.Quit

Sub Rename(File,NewName)
On Error Resume Next
File.Name=NewName
End Sub
----------------------------------------------
DocFdate.VBS V1.02 (C) [email protected] 2003-11-17

ファイル名の先頭にファイル更新年月日を付加するVBScript

1. 目的、用途

文書ファイル(に限りませんが)のファイル名の先頭に日付を入れたい、
というツールです。

私は作成中の文書ファイル名は「ほげほげ.doc」にしていますが、
保存文書を時系列に管理するため、作成が完了したところで文書ファイル名を
「yyyymmdd ほげほげ.doc」に変更することにしています。と言いたいところですが、
ついつい忘れてしまい、後でまとめて変更する羽目になります。そんなとき、
いちいちファイル最終更新日付を見てファイル名を書き換えるのは面倒です。

2. 使用方法

DocFdate.VBSをデスクトップに置きます。
任意のファイル、例えば「ほげほげ.doc」というファイルをDocFdate.VBSのアイコンに
ドロップすると、ファイル名変更のダイアログボックスが現れます。
はい(Y)で、「yyyymmdd ほげほげ.doc」に変更します。
いいえ(N)で、「yymmdd ほげほげ.doc」に変更します。
キャンセルで、とりやめです。

3. 補足

(1) GUIでは複数ファイルをドロップすることも出来ます。

(2) コマンドラインでは以下のように複数ファイルをまとめて変更することも出来ます。
Windows 98等
start docfdate.vbs "ほげほげ.doc" "ほげほげ.xls"
Windows 2000等
docfdate "ほげほげ.doc" "ほげほげ.xls"

ワイルドカード(*や?)は使えません。
どうしても使いたいときは、コマンドプロンプトのFORコマンドで。
lfnfor on ( Win98などでLong File NameをFORで扱うとき )
for %f in ( *.doc ) do start /w docfdate.vbs "%f"

(3) ドロップが効かない場合、最新のWSHを再インストールすると直るかも知れません。
WSH 2.0以降(Windows2000)。Windows98はWSH1.0なので更新が必要です。

(4) ファイルの最終更新日でなく、作成日や最終アクセス日、あるいは今日の日付を
使いたい場合は以下のように変更します。

ftime=fa.DateLastModified の代わりに
ftime=fa.DateCreated または
ftime=fa.DateLastAccessed あるいは
ftime=Now

(5) 年月日の形式をISO形式(yyyy-mm-dd)にしたいときは以下のように変更します。

yyyymmdd=Mid(yyyymmdd,1,4) & "-" & Mid(yyyymmdd,5,2) & "-" & Mid(yyyymmdd,7)

' DocFdate.VBS V1.02 (C) [email protected] 2003-11-17.
' DocFdate.VBS prefixes file name with last modified date.
' Usage: start docfdate.vbs files...

Option Explicit
Dim fso
Dim arg
Dim fname
Dim fa
Dim fdate
Dim yyyymmdd
Dim lname
Dim sname
Dim ans

Set fso=CreateObject("Scripting.FileSystemObject")
For Each arg In WScript.Arguments
Set fa=fso.GetFile(arg)
If UCase(fa.Name)=UCase(fa.ShortName) Then Set fa=GetLongFile(fa)
fname=fa.Name
fdate=fa.DateLastModified
' fdate=fa.DateCreated
' fdate=fa.DateLastAccessed
' fdate=Now
yyyymmdd=CStr(Year(fdate)*10000+Month(fdate)*100+Day(fdate))
' yyyymmdd=Mid(yyyymmdd,1,4) & "-" & Mid(yyyymmdd,5,2) & "-" & Mid(yyyymmdd,7)
lname= yyyymmdd & " " & fname
sname=Mid(lname,3)
ans=MsgBox(fname & vbCR _
& "Y -> " & lname & vbCR _
& "N -> " & sname,vbYesNoCancel,"DocFdate")
If ans=vbYes Then
fa.Name=lname
ElseIf ans=vbNo Then
fa.Name=sname
End If
Next
WScript.Quit

Function GetLongFile(fa)
Dim fo
Dim uname
uname=UCase(fa.ShortName)
For Each fo In fa.ParentFolder.Files
If UCase(fo.ShortName)=uname Then Exit For
Next
Set GetLongFile=fo
End Function
-----------------------------------------------------------------------
ImageConv.VBS V1.00 (C) [email protected] 2006-02-11

イメージファイルの形式をMSPAINT.EXEで変換するVBScript

1. 目的、用途

MSPAINT.EXEで、イメージファイルを開き、名前を付けて保存で、
形式を変更して保存します。
SendKeysを使う原始的なVBScriptですが、原始的だろうが、何だろうが、
それで特に問題なく出来ればよい。それがスクリプトの真髄です。

2. 使用方法

イメージファイル(複数可)をImageConv.VBSにドロップします。

変更先の形式は、スクリプト内で指定してください。
スクリプトを見れば分かると思いますが、
以下の中からひとつを選択し、その他をコメントにします。
' wShell.SendKeys BMP
' wShell.SendKeys BMP16
' wShell.SendKeys BMP256
' wShell.SendKeys BMP24
wShell.SendKeys GIF
' wShell.SendKeys JPEG
' wShell.SendKeys TIFF

上書き保存のダイアログや減色の警告ダイアログが出ることがあります。
現状は、そこまでは自動化してません。
' wShell.SendKeys "%y"
のコメントを外すと、自動応答します。

' ImageConv.VBS V1.00 (C) [email protected] 2006-02-11
' ImageConv.VBS converts Image file by MSPAINT.EXE.
' Usage: Start ImageConv.VBS Image_files...

Option Explicit

Const BMP="{Home}" 'モノクロ ビットマップ
Const BMP16="1" '16色 ビットマップ
Const BMP256="{Home}2" '256色 ビットマップ
Const BMP24="{Home}22" '24ビット ビットマップ
Const JPEG="j"
Const GIF="g"
Const TIFF="t"
Const PNG="p"

Dim arg
For Each arg In WScript.Arguments
Call Process(arg)
Next

Sub Process(File)
Dim wShell

Set wShell=CreateObject("WScript.Shell")
wShell.Run "MSPAINT.EXE """&File&""""
Do While Not wShell.AppActivate(" - ペイント")
WScript.Sleep 100
Loop
WScript.Sleep 100
wShell.SendKeys "%(fa)"
Do While Not wShell.AppActivate("名前を付けて保存")
WScript.Sleep 100
Loop
WScript.Sleep 100
Do While wShell.AppActivate("名前を付けて保存")
wShell.SendKeys "%t"

' wShell.SendKeys BMP
' wShell.SendKeys BMP16
' wShell.SendKeys BMP256
' wShell.SendKeys BMP24
wShell.SendKeys GIF
' wShell.SendKeys JPEG
' wShell.SendKeys TIFF

wShell.SendKeys "%s"
WScript.Sleep 100
Loop
WScript.Sleep 100
Do While wShell.AppActivate(" - ペイント")
' wShell.SendKeys "%y" '上書き保存/減色の警告ダイアログに自動応答します。
wShell.SendKeys "%fx"
WScript.Sleep 100
Loop
End Sub
------------------------------------------------------------------

--------------------------------------------------------------------
FileFinder.VBS V1.01 (C) [email protected] 2005-03-16

エクスプローラのフォルダ画面で指定条件のファイルを検索するVBScript

1. 目的、用途

エクスプローラのフォルダ画面で、
名前をワイルドカードで指定したり、
サイズや日付を大小比較で指定して、
現カーソル(選択)位置から下方向に検索して、
該当するファイルに位置付けます。
例えば、ファイル名に「ほげ」が含まれている(先頭とは限らない)
ファイルに、「Name=*ほげ*」で位置付け出来ます。

2. 使用方法

エクスプローラで対象フォルダを開いた状態で、起動します。
「お気に入り」や「リンク」に登録しておくとよいでしょう。

選択条件のプロンプトに入力します。
(例)
Name=*.bk?
Size<=10
Date<4/1
Time<=2005/3/31 12:00

(1) 名前
N[ame]=base.ext
ワイルドカード(* ?)が使えます。

(2) サイズ
S[ize]{<|=|>|<=|<>|>=}nn
サイズの単位はKB(1024 Bytes)です。

(3) 日付
D[ate]{<|=|>|<=|<>|>=}[[cc]yy/]mm/dd
年月日を指定します。年を省略すると、今年になります。

(4) 時刻
T[ime]{<|=|>|<=|<>|>=}[[[cc]yy/]mm/dd] hh:mm
年月日時分を指定します。日付を省略すると、今日になります。

誤操作防止のため、選択中はダブルクリックでの起動は抑止されます。

1.01で、信頼性に欠けるSendKeysを止めて、SelectItemRelativeを使用する
ように変更しました。ただし、SelectItemRelativeが2000でも使えるか、
どうかの確認が出来ないため、SendKeysを使う版をFileFinder2.VBSとして
残しています。FileFinder2.VBSは1.01で待ち時間を減らして速くしました。
タイミングが合わない場合はSleep()の時間を調節してください。
WScript.Sleep 200

' FileFinder.VBS V1.01 (C) [email protected] 2005-03-16
' FileFinder.VBS finds file of condition.
' Usage: Start FileFinder.VBS

Option Explicit
Dim wShell
Dim fv
Dim Shell
Dim Document
Dim FolderItem
Dim cond
Dim N
Dim OP
Dim Value
Dim Error
Dim re
Dim k
Dim Prev

Set re=New RegExp
re.IgnoreCase=True

Set wShell=CreateObject("WScript.Shell")
Set fv=WScript.CreateObject("Shell.FolderView.1","FV_")
Set Shell=CreateObject("Shell.Application")
Do
cond=InputBox("Enter Condition To Select." & vbCrLf & _
"N[ame]=*.*" & vbCrLf & _
"S[ize]{< > =}n" & vbCrLf & _
"D[ate]{< > =}[yy/]mm/dd" & vbCrLf & _
"T[ime]{< > =}[[yy/]mm/dd] hh:mm" & vbCrLf & _
vbCrLf & _
N & OP & Value &vbCrLf & _
Error & vbCrLf _
,WScript.ScriptName,cond,0,0)
If IsEmpty(cond) Then Exit Do
If Parse(cond) Then
Set Document=Shell.Windows.Item.Document
Call fv.SetFolderView(Document)
Do
If Document.SelectedItems.Count Then
Prev=Document.SelectedItems.Item(0).Name
Document.SelectItemRelative 1
Else
Prev=""
Document.SelectItemRelative 0
End If
' WScript.Echo Prev,Document.SelectedItems.Count
If Document.SelectedItems.Count<>1 Then Exit Do
If Prev=Document.SelectedItems.Item(0).Name Then Exit Do
If Test(Document.SelectedItems.Item(0)) Then Exit Do
Loop
End If
Loop
WScript.Quit

Function Parse(ByVal cond)
OP=""
Value=""
Error=""

Select Case Mid(cond,2,1)
Case "<","=",">"
N=UCase(Left(cond,1))
cond=Mid(cond,2)
Case Else
N=UCase(Left(cond,4))
cond=Mid(cond,5)
End Select

Select Case N
Case "NAME","SIZE","DATE","TIME","N","S","D","T"
Case Else
Error="Invalid Name"
Exit Function
End Select

Select Case Mid(cond,2,1)
Case "=",">"
OP=Left(cond,2)
cond=Mid(cond,3)
Case Else
OP=Left(cond,1)
cond=Mid(cond,2)
End Select

Select Case OP
Case "<","=",">","<=","<>",">="
Case Else
Error="Invalid Operation"
Exit Function
End Select

Select Case N
Case "NAME","N"
If OP="=" Then
cond=Replace(cond,".",".")
cond=Replace(cond,"?",".")
cond=Replace(cond,"*",".*")
Value=cond
re.Pattern="^"&cond&"$"
Else
Error="Invalid Operation"
Exit Function
End If
Case "SIZE","S"
If IsNumeric(cond) Then
Value=CLng(cond)
Else
Error="Invalid Number"
Exit Function
End If
Case "DATE","D","TIME","T"
If IsDate(cond) Then
Select Case N
Case "DATE","D"
Value=DateValue(cond)
Case "TIME","T"
Value=CDate(cond)
If DateValue(Value)=0 Then
Value=Date + Value
End If
End Select
Else
Error="Invalid Date"
Exit Function
End If
End Select

Parse=True
End Function

Function Test(FolderItem)
Dim ModifyDate
Dim Size

Select Case N
Case "NAME","N"
Test=re.Test(FolderItem.Name)
Case "SIZE","S"
Size=(FolderItem.Size+1023) 1024
Select Case OP
Case "<" Test=CBool(Size<Value)
Case "=" Test=CBool(Size=Value)
Case ">" Test=CBool(Size>Value)
Case "<=" Test=CBool(Size<=Value)
Case "<>" Test=CBool(Size<>Value)
Case ">=" Test=CBool(Size>=Value)
End Select
Case "DATE","D","TIME","T"
Select Case N
Case "DATE","D"
ModifyDate=DateValue(FolderItem.ModifyDate)
Case "TIME","T"
ModifyDate=FolderItem.ModifyDate
ModifyDate=DateValue(ModifyDate)+TimeSerial(Hour(ModifyDate),Minute(ModifyDate),0)
End Select

Select Case OP
Case "<" Test=CBool(ModifyDate<Value)
Case "=" Test=CBool(ModifyDate=Value)
Case ">" Test=CBool(ModifyDate>Value)
Case "<=" Test=CBool(ModifyDate<=Value)
Case "<>" Test=CBool(ModifyDate<>Value)
Case ">=" Test=CBool(ModifyDate>=Value)
End Select
End Select

End Function

Function FV_DefaultVerbInvoked()
' WScript.Echo "DefaultVerbInvoked"
FV_DefaultVerbInvoked=False
End Function
-----------------------------------------------------------
tail-f.CMD V1.00 (C) [email protected] 2007-05-13

Unixのtail -f コマンド擬似のバッチファイル

1. 目的、用途

Unixに、tail -f コマンドがあります。それに似たことをします。
ファイルに時系列に順次書き込まれる内容を継続的に読み出して、
標準出力に表示します。
一時点の内容を読み出すには、MOREなどで単に読み出せばよいのですが、
一旦ファイル末尾まで読んで、その後その先に追加書き込みされたものを
継続的に読み出すのにはちょっとしたコツが必要です。

2. 使用方法

tail-f.CMD

バッチファイル機能だけで作ったものです。

@ECHO OFF
SETLOCAL
IF NOT EXIST "%~1" (
ECHO Usage: %~nx0 入力ファイル
GOTO :EOF
)
SET SS=0
SET LL=0
:TOP
IF %SS%==%~z1 (
rem SLEEP 1
ping localhost -n 2 >NUL
CMD /C "TYPE NUL>>%1" 2>NUL
IF NOT ERRORLEVEL 1 GOTO :EOF
GOTO :TOP
)
SET SS=%~z1
FOR /F "delims=[] tokens=1*" %%1 IN ('FIND /N /V "" ^<%1 ^|MORE +%%LL%%') DO (
SET LL=%%1
ECHO:%%2
)
:echo %LL%
GOTO :TOP
     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.