大量のファイルの名前を変更して、ファイルエクスプローラーの[変更日]列の日付をYYYYMMDD形式の各ファイル名に組み込むことを試みています。次の手順を使用して、内部のすべてのファイルの目的のファイルフォルダーからレポートを生成できました。
dir>filename.txt
次に、レポートを区切られたテキストファイルとして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を提案して、日付変更情報をより自動的にファイル名に取り込むのに使用できますか?
ご協力いただきありがとうございます!
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
_