web-dev-qa-db-ja.com

Windows CMDまたは単純な.TXTでファイル名を変更した日付をファイル名に追加するためにファイルの名前を変更します

大量のファイルの名前を変更して、ファイルエクスプローラーの[変更日]列の日付をYYYYMMDD形式の各ファイル名に組み込むことを試みています。次の手順を使用して、内部のすべてのファイルの目的のファイルフォルダーからレポートを生成できました。

  1. Tips and Tricksフォルダをクリックします
  2. Shiftキーを押しながら、Tips and Tricksフォルダを右クリックします
  3. 「ここにコマンドウィンドウを開く」をクリックします
  4. タイプdir>filename.txt
  5. Enterをクリックします
  6. Tips and Tricksフォルダを開き、作成したファイル名のテキストファイルを探します

次に、レポートを区切られたテキストファイルとしてExcelにプルし、コンテンツを操作して、ある列に「最終更新日」、別の列にファイル名を表示します。

変更日 | ファイル名

2009年1月9日| ArcGIS_TT_Projections_Transformations.doc

2014年2月18日| ArcGIS_TT_Re-Projection_WMAS.docx

2009年1月9日| ArcGIS_TT_Set_Selectable_Layers.doc

2009年1月9日| ArcGIS_TT_Spatial_Join.doc

2010/4/21 | ArcGIS_TT_View_CLU_History_Layer.doc

私は次のような名前変更スクリプトを使用してのみ成功しました:

@echo off
setlocal enableDelayedExpansion
for %%F in ("ArcGIS_TT_Projections_Transformations*.txt") do (
  set "name=%%F"
  ren "!name!" "!name:ArcGIS_TT_Projections_Transformations=ArcGIS_TT_Projections_Transformations_20090109!"
)
pause

しかし、私は61個のファイルに対してそのプロセスを繰り返す必要がないようにしています。誰かがWindows CMDプロンプトまたは単純な.txtを提案して、日付変更情報をより自動的にファイル名に取り込むのに使用できますか?

ご協力いただきありがとうございます!

3
newbie

OK @newbie、これがテキストファイルを反復処理し、各ファイルの変更日を取得し、変更日をファイル名の一部として使用して各ファイルをコピーし、元のファイルを削除するために使用する必要があるコードです。あなたは非常に近かったが、いくつか欠けていました。

ファイルの変更日を取得するには、_set "MDate=%%~tF"_を使用できます。

_set "MDate=%%~tF"_によって提供される日付を解析するには、%MDate%によって格納される値のどの部分を出力で使用するかを指定する必要があります。 _set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"_コマンドを使用して、_set "MDate=%%~tF"_の出力をMM/DD/YYYY hh:mmからYYYYMMDDに変換できます。

その後、ファイル名に%ParsedDate%の値を使用して、ファイルを新しいファイルにコピーできます。

ファイルのコピーが2つ表示されます。元のファイルを削除する場合は、for %%F in ("C:\test\*.txt") do ( del %%F )コマンドを実行するだけです。名前が変更されたテキストファイルが残ります。 .txt.newを.txtに変換するには、コマンド_ren "C:\test\*.new" *._を使用します。

Forループにいるので、変数への対処方法を変更する必要があります(これは、これまでに記述した内容に基づいて既に知っています)。 %を!に変更します。ループ内の変数名。したがって、変数名exampleがある場合、_!example!_ではなく、ループ内で_%example%_を使用して変数を参照します。

ループ内の変数が機能するためには、ループの前にコマンド_setlocal enabledelayedexpansion_を追加する必要もあります。

それはすべてをカバーするはずです。これで問題が解決した場合は、遠慮なく投票するか、正解としてマークしてください。

完全なバッチファイルを以下に示します。

_setlocal enabledelayedexpansion

for %%F in ("C:\test\*.txt") do ( 
    set "MDate=%%~tF"
    set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
    copy %%F %%~dpnF_!ParsedDate!%%~xF.new )

for %%F in ("C:\test\*.txt") do ( 
    del %%F )

ren "C:\test\*.new" *.

exit
_
2
user5870571