- 締切済み
エクセルの名前を自動で変更
20分おきに自動的にデスクトップ上にexcelシートが たまっていくセンサを使っております。 そこで質問ですが、何もせずに放置しておくと自動的に上書き保存 されていくので、デスクトップ上にexcelシートがきたら自動で 名前を変更してくれるようにしたいです。 どのようにすればよいでしょうか? よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- argument
- ベストアンサー率63% (21/33)
はじめまして 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で取れましたね。ハードコーディングする意味は無かったですね(まぁハードコーディングの方が何が変数に格納されているかわかりやすいですが)。 処理違い・補足・追加処理等必要でしたらいってください。
- argument
- ベストアンサー率63% (21/33)
はじめまして 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秒後勝手にリネームされましたね? これで貴方は任意の名前のファイルを自動で監視しファイルが来れば自動でリネームするスクリプトを得ました。 処理違い・補足・追加処理等必要でしたらいってください。
お礼
大変遅くなりましたすいません ありがとうございます! さっそく実行してみます
- mitarashi
- ベストアンサー率59% (574/965)
#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
お礼
遅くなり本当に申し訳ありません。 ありがとうございます!!
- mitarashi
- ベストアンサー率59% (574/965)
実用的かどうか大変疑問ですが、ファイルを複写して、自分自身の実行をタスクスケジューラで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
- n-jun
- ベストアンサー率33% (959/2873)
ANo.2です。 >マクロで出来れば1番よいと考えていましたが >ありませんでしたのでC++の利用を考えました。 一番はデスクトップにファイルを書き出す際に、ファイル名に日付と時間を利用して 重複しないファイル名をつけていけば上書きされないです。 そのファイルに手を加えられないのであれば、別の方法で同じ事をするしかないかと。 と言ってもC++はわからないんです。
- n-jun
- ベストアンサー率33% (959/2873)
ANo.1です。 >visual C++を利用しようと考えております。 Excelについての質問ではないようですね。 C++は未経験ですが、20分おきにExcelファイルが出来上がるのなら、 20分おきにファイルの有無を確認してもしファイルがあれば、どこかのフォルダに 移動してリネーム(日付と時間を利用)していけばいいのでは? と思いますけど。
補足
マクロで出来れば1番よいと考えていましたが ありませんでしたのでC++の利用を考えました。 利用目的の関係上、24時間の記録が必要ですので 自動でリネームをする必要があるのです・・・。
- n-jun
- ベストアンサー率33% (959/2873)
>20分おきに自動的にデスクトップ上にexcelシートが >たまっていくセンサを使っております。 この制御はExcelで行なっているのですか? それとも別のソフトで行なっているのですか? もし別のソフトで行なっているのであれば、そのソフトを改良すればいいように思いますけど。
補足
visual C++を利用しようと考えております。 よろしくお願いします。
お礼
ありがとうございます! 大変助かりました。