
PowerShellについて勉強中です。
現在、日付を取得したものをファイル名にしてログファイルを作成し、そこに、その日の実行したスクリプトの結果が追記されていくようにしたいのですが、新規にファイルを作成した時には、当然問題がないのですが、new-itemを使用したため、すでにフォルダがありますとエラーになってしまいます。
ログファイルを作成する部分と、スクリプト実行の部分を分けずに、ひとつのps1にしなければなりません。
そのため、if文などで分岐をする必要があると思うのですが、ログのファイル名が日付を取得するので、このような場合、どう記述するものなのか、教えていただければと思います。
日付を取得してファイルを作成したところまでを、下に書きます。
よろしくお願いします。
Function GetFileName([ref]$fileName)
#日付を取得してログファイル名に設定する
{
$invalidChars = [io.path]::GetInvalidFileNamechars()
$date = Get-Date -format yyyy/MM/dd
$fileName.value = ($date.ToString() -replace "[$invalidChars]","-") + ".log"
}
$fileName = $null
#ログファイルをc:\shareに作成する
GetFileName([ref]$fileName)
new-item -path c:\share -name $filename -itemtype file
この下に、実行するバッチの起動などのスクリプトが続きます。
No.1ベストアンサー
- 回答日時:
System.IO.StreamWriter(String, Boolean, Encoding)コンストラクタの第二引数や
http://msdn.microsoft.com/en-us/library/f5f5x7kt …
FileStream(String, FileMode, FileAccess)コンストラクタ第三引数でなんとかすれば別に分岐は必要ない
#最初の$filename取得がやたら回りくどいのは俺の好みの所為。
#System.IO.File.AppendAllText(String, String, Encoding)があまり好きではない。個人的に。
$filename = [System.IO.Path]::Combine("C:\",[System.IO.Path]::ChangeExtension([System.DateTime]::Now.ToString("yyyy-MM-dd",[System.Globalization.CultureInfo]::InvariantCulture),"log"));
$str = New-Object -TypeName ("System.IO.StreamWriter") -ArgumentList ($filename,$true,[System.Text.Encoding]::UTF8)
$str.WriteLine("xxxx")
$str.Flush()
$str.Close()
============
どうしても分岐したければ
if([System.IO.File]::Exists("C:\books1.csv")){
[System.Console]::WriteLine("abc")
}else{
[System.Console]::WriteLine("def")
}
とかやればいいけれども。

この回答への補足
早速の追記ありがとうございました。
確かに、力を引き上げるのが一番なんですよね(自分を含め)。
今回いただいた二つのものから、System.IOの使い方が良くわかっていない自分に気がつきました。
分岐をするにしてもしないにしても、ここがちゃんとわかってないと、つまずきから前に進めないこともよく自覚できました。
(あと、英語のサイトを避けて通らないこと)
ありがとうございます。
回答ありがとうございます。
$filename = [System.IO.Path]::Combine("C:\",[System.IO.Path]::ChangeExtension([System.DateTime]::Now.ToString("yyyy-MM-dd",[System.Globalization.CultureInfo]::InvariantCulture),"log"
この部分が、回りくどいとおっしゃっていましたが、私にはとてもわかりやすったです。
ただ、同じように初心者の人が、修正したりする作業が発生した場合に見てわかりやすいのが分岐かな?と思ったのです。
分岐の例にあるファイル名のところがExists("C:\books1.csv")のように()内にファイルのPATHを記述すればいいのだと思うのですが、ファイル名が取得した値を利用するため変わる場合は、どう記述したらよいのかがわかりませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- JavaScript gasについて 1 2022/05/31 21:51
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
powershellで関数名を変更する...
-
Perlスクリプトで文字化けして...
-
perl でクッキーの状態を調べる
-
CGI + Mysqlによるバックアップ
-
CシェルプログラミングをCygwinで?
-
Excelシート内セル記述の違いに...
-
VBAで別モジュールへの変数の受...
-
「デバイスは PRN を初期化でき...
-
ActivePerlでWindows上のパスを...
-
Excel VBAで、ユーザーフォーム...
-
エラー画面の制御?
-
サブルーチンを使った再帰的な...
-
perl で 64ビットint を扱うには?
-
PadWalkerのインストールの仕方
-
VBでグローバル変数を宣言するには
-
Perlモジュールインストール ta...
-
ApacheがPerlを作動してくれな...
-
msgboxの表示
-
pythonでファイル移動できません。
-
VBA This Workbookモジュール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADサーバにおけるログインID,PC...
-
Cからシェルを起動し返り値をハ...
-
Perlのライセンス
-
powershellで関数名を変更する...
-
cygwinでcshが認識されず困って...
-
UWSCのスクリプトにラグが発生...
-
VBScriptでCurrentDirectoryを...
-
perlスクリプトのブラウザURLか...
-
awkの処理速度を改善したい
-
シェルでsyntax errorがでてしまう
-
vbs: オブジェクトがコレクショ...
-
Postfixでメールを受信したらPe...
-
複数のスクリプトを同時に走ら...
-
CGI_Lite.pmは,Perl6.5.1 で使...
-
perlでコマンドライン文字列受...
-
スペースを含むファイルの実行...
-
PHPとJavaScriptを足してビルド...
-
なぜAドライブが起動するのでし...
-
CGI + Mysqlによるバックアップ
-
Windows系OSのPerlスクリプト...
おすすめ情報