dポイントプレゼントキャンペーン実施中!

20分おきに自動的にデスクトップ上にexcelシートが

たまっていくセンサを使っております。

そこで質問ですが、何もせずに放置しておくと自動的に上書き保存

されていくので、デスクトップ上にexcelシートがきたら自動で

名前を変更してくれるようにしたいです。

どのようにすればよいでしょうか?

よろしくお願いします。

A 回答 (7件)

はじめまして s0570063 さん


問題は解決しましたか?貴方のためにより良いスクリプトを作成しました。
以下のファイルひとつを作成すれば問題は解決します。


ただし前回同様
ファイル名を指定してください
originalfilename = "元のファイル名.xls"

監視時間を指定してください。単位はミリ秒です(1000=1秒)。
sleeptime = 10000

もしも監視場所がデスクトップ以外になりそうなら変更してください
directory = CreateObject("WScript.Shell").SpecialFolders("desktop")
↓このようにダブルコーテーションで囲んだパスにする
directory = "C:\Documents and Settings\user\デスクトップ"







[check2.vbs]

If LCase(Right(WScript.FullName,11))="wscript.exe" then
CreateObject("WScript.Shell").Run "cmd.exe /c start cscript """ & wscript.scriptfullname & """" ,,false
else
directory = CreateObject("WScript.Shell").SpecialFolders("desktop")
originalfilename = "元のファイル名.xls"
sleeptime = 10000
wscript.echo "Ctrlキー&Cキーを押すと停止します"
On Error Resume Next
do while 1
wscript.sleep sleeptime
wscript.echo date & time & "監視中"
For Each fl In CreateObject("Scripting.FileSystemObject").GetFolder(directory).Files
if instr(fl.Name,originalfilename) > 0 then
wscript.echo "新しいファイルを検知しました。DateTimeをつけリネームします"
de = split(date,"/"):te=split(time,":")
fl.Name = left(fl.Name,len(fl.Name)-4) & de(0) & de(1) & de(2) & "_" & te(0) & te(1) & ".xls"
end if
Next
loop
end if



実行してみましたか?vbs単品で前回と全く等価の処理となりました。
回答してから思い出しましたが何もbatでCscriptで起動せずともスクリプト自身から自分を判定させてCscriptじゃなければ自身をCscriptで起動すればよいですね。
それからデスクトップパスはfsoで取れましたね。ハードコーディングする意味は無かったですね(まぁハードコーディングの方が何が変数に格納されているかわかりやすいですが)。

処理違い・補足・追加処理等必要でしたらいってください。
    • good
    • 0
この回答へのお礼

ありがとうございます!

大変助かりました。

お礼日時:2008/10/01 14:38

はじめまして s0570063 さん


問題は解決しましたか?締め切っていないということはまだ解決していないのでしょう。貴方のためにスクリプトを作成しました。
必要なのは以下の二つをそれぞれの名前をつけデスクトップに保存し
batを起動するだけです。

これはタスクを使ったりしません。また起動すれば任意にとめない限りきちんと動き続けるでしょう(もちろんPCが落ちたらとまりますが)。
以下を回答として提示します。

VBSの中身のみ変更が必要です
貴方のデスクトップパスを指定してください
directory = "C:\Documents and Settings\user\デスクトップ"
ファイル名を指定してください
originalfilename = "元のファイル名.xls"
監視時間を指定してください。単位はミリ秒です(1000=1秒)。
sleeptime = 10000




[監視.bat]
cscript check.vbs



[check.vbs]
if not Right(WScript.FullName,11) = "cscript.exe" then msgbox("バッチから起動してください"):wscript.quit
directory = "C:\Documents and Settings\user\デスクトップ"
originalfilename = "元のファイル名.xls"
sleeptime = 10000
wscript.echo "Ctrlキー&Cキーを押すと停止します"
On Error Resume Next
do while 1
wscript.sleep sleeptime
wscript.echo date & time & "監視中"
For Each fl In CreateObject("Scripting.FileSystemObject").GetFolder(directory).Files
if instr(fl.Name,originalfilename) > 0 then
wscript.echo "新しいファイルを検知しました。DateTimeをつけリネームします"
de = split(date,"/"):te=split(time,":")
fl.Name = left(fl.Name,len(fl.Name)-4) & de(0) & de(1) & de(2) & "_" & te(0) & te(1) & ".xls"
end if
Next
loop



「監視.bat」を実行してください。
「元のファイル名.xls」という名前のファイルををデスクトップにおきます。すると上記のデフォルト設定ならば10秒後勝手にリネームされましたね?
これで貴方は任意の名前のファイルを自動で監視しファイルが来れば自動でリネームするスクリプトを得ました。


処理違い・補足・追加処理等必要でしたらいってください。
    • good
    • 0
この回答へのお礼

大変遅くなりましたすいません

ありがとうございます!

さっそく実行してみます

お礼日時:2008/09/30 15:20

#4の続報です。

他アプリが生成するファイルを、実行時の年月時分の名前に付け替えて複写します。ウィルス対策ソフトのスクリプトに対するプロテクトを無効にできるなら、1日以上は動くと思います。日をまたぐ部分は未確認です。
Dim objWMIService
Dim strComputer
Dim errJobCreated, JobId
Dim objNewJob
Dim timeSettingString
Dim myTask
Dim objFSO
dim strDestFile
dim strPath

strPath = "C:\Documents and Settings\?????\デスクトップ\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDestFile = Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & Right("0" & Hour(Now), 2) & Right("0" & minute(Now), 2) & ".xls"
objFSO.CopyFile strPath & "他アプリが生成するファイル.xls",strPath & strDestFile
myTask = "taskTest.vbs" 'このスクリプトの名前、System32に置く
timeSettingString = "********" & Right("0" & Hour(Now), 2) & Right("0" & minute(Now), 2) & "00.000000+560"
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create(myTask, timeSettingString, False, , , , JobId)
Set objNewJob = Nothing
Set objWMIService = Nothing
    • good
    • 0
この回答へのお礼

遅くなり本当に申し訳ありません。

ありがとうございます!!

お礼日時:2008/09/30 15:26

実用的かどうか大変疑問ですが、ファイルを複写して、自分自身の実行をタスクスケジューラで20分後に設定するスクリプトです。

Windows2000での試行です。
(問題点)
1.FSOがウィルス対策ソフトにひっかかる
2.タスクの番号がどんどん増えていくので、どこかでエラーになるかも
3.日をまたぐ対策を取ってない
'タスクスケジューラで、詳細設定/ATサービスのアカウント/システムに設定しておく必要がある
Dim objWMIService
Dim strComputer
Dim errJobCreated, JobId
Dim objNewJob
Dim timeSettingString
Dim myTask
Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\Documents and Settings\?????\デスクトップ\src.xls","C:\Documents and Settings\?????\デスクトップ\dest.xls"
myTask = "taskTest.vbs" 'このスクリプトの名前、Windows2000の場合、System32に置く
'local timeへの変換のための540 + 実行間隔20 -> 560
timeSettingString = "********" & Right("0" & Hour(Now), 2) & Right("0" & minute(Now), 2) & "00.000000+560"
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create(myTask, timeSettingString, False, , , , JobId)
'for Debug
'If errJobCreated = 0 Then
' wscript.echo "登録しました。" & vbCrLf & "ジョブID:" & JobId
'Else
' wscript.echo "登録に失敗しました。"
'End If
Set objNewJob = Nothing
Set objWMIService = Nothing
    • good
    • 0

ANo.2です。



>マクロで出来れば1番よいと考えていましたが
>ありませんでしたのでC++の利用を考えました。
一番はデスクトップにファイルを書き出す際に、ファイル名に日付と時間を利用して
重複しないファイル名をつけていけば上書きされないです。
そのファイルに手を加えられないのであれば、別の方法で同じ事をするしかないかと。

と言ってもC++はわからないんです。
    • good
    • 0

ANo.1です。



>visual C++を利用しようと考えております。
Excelについての質問ではないようですね。

C++は未経験ですが、20分おきにExcelファイルが出来上がるのなら、
20分おきにファイルの有無を確認してもしファイルがあれば、どこかのフォルダに
移動してリネーム(日付と時間を利用)していけばいいのでは?
と思いますけど。

この回答への補足

マクロで出来れば1番よいと考えていましたが

ありませんでしたのでC++の利用を考えました。

利用目的の関係上、24時間の記録が必要ですので

自動でリネームをする必要があるのです・・・。

補足日時:2008/09/11 17:42
    • good
    • 0

>20分おきに自動的にデスクトップ上にexcelシートが


>たまっていくセンサを使っております。
この制御はExcelで行なっているのですか?
それとも別のソフトで行なっているのですか?

もし別のソフトで行なっているのであれば、そのソフトを改良すればいいように思いますけど。

この回答への補足

visual C++を利用しようと考えております。

よろしくお願いします。

補足日時:2008/09/11 16:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!