- ベストアンサー
vbs上コピーコマンド実行で難題にぶつかりました。助けてください!
下の実行コードのログファイル名の指定の部分を固定ではなくいつも前日のログファイルを取得できるようにしたいですがどうすればいいですか? WshShell.Run "cmd /c copy /y \\kkk\d$\LOG\kkk02\WEBEXTD20060124.log C:\kkk\dat\kkk02\kkk02WEBEXTD20060124.log" , 8,true WEBEXTD20060124部分でWEBEXTDこちらは固定です。 20060124部分は日付により変更ですが 例:今日が3日だから昨日のログWEBEXTD20060202.logを取ってきてコピーしてWEBEXTD20060202.logにしたいです。 あと可能であればパスの部分も固定ではなく フル-で決めたいですが(INIファイルからパラメータから取得させる)。。。可能ですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>どこが間違っているか教えていただけますか? プログラムの断片だとちょっと判断しかねます。 できれば、 ・うまくいった場合 ・うまく行かなかった場合、 を省略しないで必要な部分だけ挙げていただけますか? 一般論を書いておきますと FSO.CopyFile コピー元, コピー先 のようにコピー先が必要です。 コピー先が¥で終わる場合はフォルダとみなされます。 フォルダの場合、指定したフォルダがないとエラーになります。 また、コピー先のファイルが既にあって、読み取り専用の場合、エラーになります。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#3補> >FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\strfilename ", "C:\kkk\dat\kkk01\" はダメです。strfilenameが埋め込みにはならないので。 >FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\"&strfilename , "C:\kkk\dat\kkk01\" は、特に問題なさそうに思えます。 ただ、うまく言った場合の例で >FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\WEBEXTD20060205.log", "C:\NRI\dat\kkk01\" と書かれているので、コピー先のフォルダが違うのが気になります。 失敗する場合の例の >"C:\kkk\dat\kkk01\" のフォルダは存在しますか?
補足
If (Err.Number = 0) Then Dim yesterday, yesterdayStr yesterday= date -2 yesterdayStr=CStr(year(yesterday))& right("0"&month(yesterday),2) & right("0"&day(yesterday),2) strfilename = "WEBEXTD" & yesterdayStr&".log" strfilenamepath = "\\cgtpx01\d$\LOG\ISALogs\"&strfilename stroutputpath = "C:\NRI\dat\px01\" ret = outputlog(strLogFullPath,"&yesterdayStr&は"&yesterdayStr&"desu") ret = outputlog(strLogFullPath,"&strfilename&は"&strfilename&"desu") ret = outputlog(strLogFullPath,"&strfilenamepath&は"&strfilenamepath&"desu") Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile strfilenamepath,stroutputpath OutZipFolderPath = stroutputpath CopyFilePath = strfilenamepath ret = outputlog(strLogFullPath,"&CopyFilePath&は"&CopyFilePath&"desu") Call makezipfile() ret = outputlog(strLogFullPath,"px01zipfileが正常終了しました。") Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile "\\cgtpx02\d$\LOG\ISALogs\WEBEXTD20060124.log", "C:\NRI\dat\px02\" OutZipFolderPath="C:\NRI\dat\px02\" CopyFilePath ="C:\NRI\dat\px02\WEBEXTD20060124.log" Call makezipfile() ret = outputlog(strLogFullPath,"px02zipfileが正常終了しました。") px10は失敗の場合ファイル名を代入 px02は成功した場合ファイル指定 以下はログです。 2006/02/06 14:26:36 &yesterdayStr&は20060204desu 2006/02/06 14:26:36 &strfilename&はWEBEXTD20060204.logdesu 2006/02/06 14:26:36 &strfilenamepath&は\\cgtpx01\d$\LOG\ISALogs\WEBEXTD20060204.logdesu 2006/02/06 14:26:36 &CopyFilePath&は\\cgtpx01\d$\LOG\ISALogs\WEBEXTD20060204.logdesu 2006/02/06 14:26:36 px01zipfileが正常終了しました。 2006/02/06 14:26:36 SourceFileはC:\NRI\dat\px02\WEBEXTD20060124.logです。 2006/02/06 14:26:36 ファイル削除が正常終了しました。 2006/02/06 14:26:36 px02zipfileが正常終了しました。
- popesyu
- ベストアンサー率36% (1782/4883)
知識があるのか無いのか良く分からないのですが、通常そういう場合は1番さんの参考のように変数にしてそれぞれで必要な日付の値をとってきて適当に加工して、最後に繋げてしまう手法が一般的かと思います。 Copyはわざわざコマンドラインのを使わなくてもFileSystemObjectを使うべきと思います。コードが分かりやすくなりますし。機能も豊富ですし。 FSOについて http://www.interq.or.jp/student/exeal/dss/ref/wsh/scripting/filesystemobject.html INIファイルからの読み込みについてはINIファイルをINIとして操作するならAPIに頼るしかありません。 http://homepage1.nifty.com/MADIA/vb/API/GetPrivateProfileString.htm とりあえずTXTファイルとして読み取って力技で取得するという方法もあります。 http://www1.u-netsurf.ne.jp/~tomo_c/tips/R23Lev04.html
お礼
すみません!お礼が遅くなりました. ご指導ありがとうございます。 非常にいいヒントになりまして、コードが ずいぶんすっきりなりました。iniファイルからの 読み込みはちょっと私の能力では できないみたいですのでその方法は 使わないことにしました。 ありがとうございます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Dim yesterday, yesterdayStr yesterday= date -1 yesterdayStr=CStr(year(yesterday))& right("0"&month(yesterday),2) & right("0"&day(yesterday),2) とすると、 yesterdayStr="20060202" になります >INIファイルから 可能ですが・ INIファイル形式を扱う関数というのは、VBScriptには無かったように思います。(レジストリを扱う関数はあります) 特にINIファイルにこだわるのでなければ、単純にファイルから読み出せば良いと思います あと、copy についても、cmd /c copy でなくてもfso CopyFile でできるような気がします
お礼
BLUEPIXY様: この度は本当にお世話になりました。お陰さまで 問題解決することができましたし、いろいろお勉強になりました。 どうもありがとうございます。 最後のミスは私が全角と半角の間違いから 起こった問題でした。すみません、時間がないのに いっぱい使わせていただいて。。。 本当にありがとうございます。
補足
いつも貴重なお時間を使わせていただきまして ありがとうございます。fso CopyFile でコピーを したらコードが簡潔でみやすくなりました。 ところでファイルパスが固定パスを与えたの場合は うまくいきますが、yesterdayStrを使ってパスを与えると 認識してくれないのです。私が書き間違っているかも 知りませんが、パスは以下の通りです。どこが間違っているか教えていただけますか?よろしくお願いいたします。 strfilename = "WEBEXTD" & yesterdayStr FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\"&strfilename&".log"←これが認識できないみたいです。ファイル指定して、固定で与えたらできましたけど、strfilenameを加えてパスを与えるとコピーが実行されないですが。。。 , "C:\kkk\dat\px01\"←これはコピーを置くフォルダパスです。 OutZipFolderPath="C:\kkk\dat\px01\" CopyFilePath = "C:\kkk\dat\px01\"&strfilename&".log" Call makezipfile()
補足
コピーしたいファイル場所(ファイル):\\kkk01\d$\LOG\ISALogs\WEBEXTD20060205.log 上のパス --->\\kkk01:サーバ名、d$:dドライブ、といった形です。 コピーして置きたい場所(フォルダ):C:\kkk\dat\kkk01\ Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\WEBEXTD20060205.log", "C:\NRI\dat\kkk01\" 上記のように\\kkk01\d$\LOG\ISALogs\WEBEXTD20060205.logふうにファイルを指定したら コピーができますが 以下のようにファイル名を与えるとコピーができないです。どうやら私のパスの書き方がわるいみたいですが どこを直せばいいかわからなくて困っています。 Dim yesterday, yesterdayStr yesterday= date -1 yesterdayStr=CStr(year(yesterday))& right("0"&month(yesterday),2) & right("0"&day(yesterday),2) strfilename = "WEBEXTD" & yesterdayStr&".log" ret = outputlog(strLogFullPath,"strfilename は"&strfilename &"desu") Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\strfilename ", "C:\kkk\dat\kkk01\" 或は FSO.CopyFile "\\kkk01\d$\LOG\ISALogs\"&strfilename , "C:\kkk\dat\kkk01\" 両方ともやってみましたが失敗しました。初心者でいろいろ 細かくきいて大変恐縮です。こんな感じで問題説明をすればお分かりでしょうか?