ddmmmyyyyの日付形式からmmddyyyyにファイル名を変更する際に問題があります。問題は月は01DEC2012のように省略されています。誰でもこのコードを教えてくれますか?ファイルの日付形式をDDMMMYYYYからMMDDYYYYに変更する
答えて
最短解はPowerShell's date formattingとなります。ここでは、その文字列形式をどのように変換できるかを簡略化したデモです。 CMDラインでこれを入力します。
powershell "([datetime]'01DEC2012').ToString('MMddyyyy')"
出力:
そこから、正規表現そのDateTime
オブジェクトのToString()
でどんな試合を交換後、最初の形式を一致させることができます代用。これを.bat拡張子で保存し、それにショットをつけてください。
<# : batch portion
@echo off & setlocal
rem // re-evaluate self with PowerShell
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
: end batch/begin PowerShell polyglot code #>
# Get all files in the current directory. For each, check for regexp matching
# [0-9]{2}[a-z]{3}[0-9]{4}. If matched, cast the match as a DateTime object,
# convert its format, and rename the matched file
gci | ?{ $_.Name -match "\d\d[a-z]{3}\d{4}" } | %{
$target = ([datetime]$matches[0]).ToString("MMddyyyy")
$newname = $_.Name -replace $matches[0], $target
ren $_.FullName $newname
"{0} -> {1}" -f $_.Name, $newname
}
(編集したが、まだテストしていません)
setlocal enableDelayedExpansion
set "months=JAN-01 FEB-02 MAR-03 APR-04 MAY-05 JUN-06 JUL-07 AUG-08 SEP-09 OCT-10 NOV-11 DEC-12"
for /f "tokens=* delims=" %%a in ('dir /b /a:-d^|findstr /i /r "[0-9][0-9][A-Z][A-Z][A-X][0-9][0-9][0-9][0-9]*"') do (
set "filename=%%~a"
set "datepart=!filename:~0,9!"
set "rest=!filename:~9!"
set "day=!filename:~0,2!"
set "mon=!filename:~2,3!"
for %%# in (%months%) do (
for /f "tokens=1,2 delims=-" %%x in ("%%#") do (
if /I !mon! equ %%x (
set "!mon2!=%%y"
)
)
)
set "year=!filename:~5,4!"
rem remove the "echo" to activate renaming
echo ren "!datepart!!rest!" "!mon2!!day!!year!!rest!"
)
注テストされていません - を私は強くあなたの代わりにMMDDYYYYのYYYYMMDD形式を使用することを推奨します。これにより、ファイルを時系列でソートすることができます。しかし、私の答えはMMDDYYYYと書いてあります。
私はJREN.BAT - a regular expression file renaming utility with date/time functionalityを使用します。これは、XP以降の任意のWindowsマシンでネイティブに実行される純粋なスクリプト(ハイブリッドJScript /バッチ)です。
あなたの日付は英語の3文字の略語を使用していると仮定しています。
次の単純なコマンドは、テストモードでファイルの名前を変更します。つまり、実際に何も実行せずにファイルの名前を変更する方法を示します。実際にファイルの名前を変更するには、/T
オプションを削除します。
jren "\d\d[a-zA-Z]{3}\d{4}" "ts({dt:$0,fmt:'{MM}{DD}{YYYY}'})" /j /t
上記の問題は、実際に日付が含まれていないファイルの名前を簡単に変更できることです。たとえば、6412DEC2016875
には日付形式が埋め込まれていますが、おそらく日付ではありません。 99ABC1234のようなものは検索パターンにマッチしますが、明らかに日付ではなく、JRENコマンドは失敗します。
より複雑な正規表現検索を使用して、真の日付のみを照合することができます。以下は、英語の3文字の月の略語にのみ一致し、日前または年の後に余分な数字がある場合、可能な日付文字列は無視されます。しかし、42のような無効な日が見つかると、これは失敗する可能性があります。
jren "(^|\D)(\d\d(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d{4})(?=\D|$)" "$1+ts({dt:$2,fmt:'{MM}{DD}{YYYY}'})" /j /i /t
コマンドをバッチスクリプト内に入れる場合は、CALL JRENを使用する必要があります。
@echo off
setlocal EnableDelayedExpansion
rem Define the array to convert month names to month numbers
set m=100
for %%m in (JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC) do (
set /A m+=1
set "month[%%m]=!m:~1!"
)
rem Previous FOR is equivalent to: set "month[JAN]=01", set "month[FEB]=02", ...
rem Process the files
for %%f in (*.*) do (
set "name=%%f"
for %%m in (!name:~2,3!) do if defined month[%%m] (
ECHO ren "%%f" "!month[%%m]!!name:~0,2!!name:~5!"
) else (
echo The file "%%f" have not DDMMMYYYY format
)
)
- 1. awakeのMMDDYYYY日付形式コンパイル
- 2. 形式の文字列ddMMMyyyy hhmm(Month-Name付き)からの解析日時
- 3. 日付の変更形式
- 4. データウェーブアプリケーション/ xmlでmmddyyyyを日付書式に変換する方法
- 5. 日付形式に変更するR
- 6. 変更日付形式
- 7. 日付形式をhtmlからmysqlに変更する(ベストプラクティス?)
- 8. Javascript日付形式を変更する
- 9. 日付形式を変更する
- 10. awkログファイルから日付形式を変更する
- 11. データベースから日付形式を変更していますか?
- 12. 変更の日付形式(Javascriptを)
- 13. SSRSガントチャート - 日付形式に変更
- 14. 日付形式をdd-mm-yyyyからyyyy-mm-ddに変更
- 15. VBAのテキスト形式から日付形式への日付
- 16. 日付ピケットの日付形式をデータベースの日付形式と一致するように変更する方法(月/日/年から日/月/年)
- 17. PHPの日付形式をJavaScriptの日付形式に変換するには?
- 18. 日付の変更の形式
- 19. SAS変更の日付形式
- 20. Best_in_place変更の日付形式レール
- 21. PHP - 日付の変更形式
- 22. 日付形式の変更点
- 23. JSP - 日付形式の変更
- 24. Coldfusion日付形式からCシャープ形式への変換
- 25. カスタム日付からMM dd yyyyへのJavaの変更日付形式
- 26. 日時を含むRの日付形式を変更する
- 27. 日付形式のPHP/laravelの日を変更する方法
- 28. SQLの変更日付の形式200901からjan09
- 29. Java日付形式からJavaScript日付形式へ
- 30. 変更日付形式/ 03/2017年3月8日08から2017 Iから日付形式を変更しようとしている
私はOPが3桁の月の略語を2桁の月の数字に変換したいと考えています。 – dbenham
@dbenham - ああ..質問は明らかにされていませんでしたが... – npocmaka
私は同意する、質問はあいまいです。私はソースがMMMを持っているという事実に基づいて、教育的なケースを作るだけですが、ターゲットはMMしかありません。しかし、実際の文字列がYYYYを使用していても、オリジナルの質問(編集前)はYYYを使用していたため、私は自信がありませんでした。 – dbenham