2

ファイルが作成された日付と時刻を前に付けて、ディレクトリ内のすべての sql ファイルの名前を変更したいと考えています。

私はコマンドプロンプトが初めてで、読んだものから以下のコードを思いつきましたが、機能していません。

for /f "delims=*" %%I in ('dir *.sql /b /s') do (    
set dt=%%~tI     
for /f "delims=/: " %%a in ('%dt%') do (set mydate=%%a)     
for /f "delims=/: " %%b in ('%dt%') do (set mytime=%%b)     
ren %%~nI.sql %mydate%%mytime%_%%~nI.sql)    
4

2 に答える 2

1

バッチファイルがSQLファイルと同じディレクトリにある場合は、次のように機能するはずです。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%f in ('dir /b *.sql') do (
  set createtime=%%~tf
  set createtime=!createtime:/=!
  set createtime=!createtime::=!
  rename "%%f" "!createtime! %%f"
)

2行目と3行目は、ファイル名に対して無効な文字であるため、 (それぞれ)nullset createtimeに置き換えられています。必要に応じて、文字の右側にこの値を挿入することで、代わりに(たとえば)他のものに置き換えることができます。/:-=

%%~tここで(そしてあなたの例では)使用されている修飾子は、実際には作成された時間ではなく、ファイルの変更された時間を取得することに注意してください。これは、SQLファイルが作成された後に変更された場合にのみ顕著になります。

また、スクリプトが複数回実行された場合に、同じファイルに追加のタイムスタンプが付加されるのを防ぐことはできません。そのため、この点に注意してください。

于 2012-12-01T04:43:42.063 に答える
0

ren "%file" "%date:~0,2%.%date:~3,2%.%date:~6,4%-%time-somename.sql"

于 2012-12-01T05:10:44.600 に答える