web-dev-qa-db-ja.com

ファイルの名前を変更してタイムスタンプを追加するためのスクリプト(サーバー2012 R2)

これらの要件を満たす(かなり単純な)バッチファイルスクリプトを作成するのに苦労しています。

  • Sourceという名前のフォルダーでファイル(name.csvを含む)を探します。
  • ファイルの名前をFile_YYYYMMDD_HHMinMinSS.csvに変更します(可能な場合は、タイムスタンプを変更/作成日にする必要があります(変更/作成は同じであるため、どちらでも機能します)。
  • それをDestinationと呼ばれるフォルダに移動し、そこでさらに作業を行うことができます。

1日あたり1つのファイルが作成されるので、そこに1つしかありませんが、1つ以上ある場合(何らかの理由でスクリプトが実行されていないため)、複数のファイルを実行するか、最初のファイルを取得して処理する必要があります正しく。 (1日に複数回実行して、以前に処理されていないものを取得するようにスケジュールすることができます。

これが私のコードです。私はそれをグーグルからつなぎ合わせて、それはファッションで機能しますが、私が望むことをまったく行いません。

echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%

set stamp=%YYYY%%MM%%DD%_%HH%%Min%%Sec%

move "c:\test\source\*.csv" "c:\test\destination\File_%stamp%.csv"

それはファイルokを見つけます。希望する形式で名前を変更します(ただし、現在の日付と時刻を使用します。代わりに、変更または作成された日付の使用方法がわかりません)。正しく移動します。ただし、1つのファイルに対してのみ機能します。ディレクトリに複数のファイルがある場合、複数のファイルを1つのファイルにマージできないことを示すエラーが発生します(つまり、すべてのファイルの名前を1つのファイルに変更することはできません)。

しかし、行き詰まっています。それをさらに進める方法がわかりません。誰かが私を助けてくれますか?私はコードが何をしているかを漠然と理解していますが、それを操作して自分がやりたいことを実行するには不十分です。

Powershellもオプションになりますが、そこで行う方法についてはあまり知りません。タスクスケジューラを介して簡単にスケジュールできる別のオプションがある場合も機能します。

3
SysAdminUK

PowerShellのこのビットは、あなたが望むことをします。引用符の間の上部にあるソースディレクトリと宛先ディレクトリへのフルパスを入力するだけです。

編集:ファイル作成時間に関するビットを追加しました。編集:命名例を追加、#はコメント、1つだけ残す$name =一度にコメントを解除します。複数のコメントを解除すると、最後にコメントが解除されて有効になります。

$source = "c:\te\s"
$destination = "c:\te\d"

Get-ChildItem $source -Recurse -Include *.csv | % {
    $name = $_.Name.Split(".")[0] + "_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    #$name = "Finished_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    #$name = "Finished_" + $_.Name.Split(".")[0] +  "_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    Rename-Item $_ -NewName $name
    Move-Item "$($_.Directory)\$name" -Destination $destination
}

余談ですが、PowerShellを学ぶために毎日少しずつ時間を割いておくことを強くお勧めします。これは非常に優れたツールであり、スクリプト言語は読みやすいので、バッチスクリプトよりもはるかにユーザーフレンドリーです。英語。 これはリソースに適したリソースです!:)

4
Joe Brailsford