ディレクトリに「APP_ENTITY_part___20120910.txt」の形式のファイル名があります
3つのアンダースコアの後のすべてを削除し、ファイル名の最初の部分を保持したいと思います。
これを達成する方法を教えてくれる良いウェブサイトはありますか?
または、バッチの専門家の1人が、これを行う方法を教えてくれますか?
ディレクトリに「APP_ENTITY_part___20120910.txt」の形式のファイル名があります
3つのアンダースコアの後のすべてを削除し、ファイル名の最初の部分を保持したいと思います。
これを達成する方法を教えてくれる良いウェブサイトはありますか?
または、バッチの専門家の1人が、これを行う方法を教えてくれますか?
変数拡張検索と置換を使用してREMコマンドを挿入する非常に単純なソリューションがあります。
@echo off
setlocal
for %%F in (*) do call set "var=%%F" & call :procName
exit /b
:procName
::truncate at the 1st occurance of ___
set "var=%var:___="&rem %
::print the result
set var
exit /b
重要なラインはset "var=%var:___="&rem %
var = Part1___Part2と仮定します
置換後、行は次のようになります。set "var=Part1"&rem Part2
上記のソリューションは、の最初の出現時に切り捨てられ___
ます。
のような名前Part1___Part2___Part3
は結果になりPart1
ます。
の最後の発生時に切り捨てて、の___
ような結果を取得するPart1__Part2
場合、ソリューションはより複雑になります。
検索と置換を使用___
してフォルダー区切り文字に変更し、次に〜p修飾子を指定した2番目のFORを使用して最後の部分を削除し、検索と置換を使用して先頭___
の区切り文字を復元します。
@echo off
setlocal disableDelayedExpansion
for %%F in (*) do (
set "var=%%F"
setlocal enableDelayedExpansion
set "var2=!var:___=\!"
if "!var2!" neq "!var!" for %%A in ("\!var2!") do (
endlocal
set "var=%%~pA"
setlocal enableDelayedExpansion
set "var=!var:~1,-1!"
set "var=!var:\=___!"
)
echo var=!var!
endlocal
)
あなたのためのシンプルな1行のソリューション:
set DirNam=%DirNam:~,-12%
____YYYYMMDD
これは、常に4つのアンダースコアと名前の末尾からの日付を削除するだけの場合に役立ちます。
たぶんこれを行うことによって他のディレクトリ名を整理します:
setlocal enabledelayedexpansion
for /d %%x in (*____????????) do (
set DirNam=%%x
set DirNam=!DirNam:~,-12!
echo %%x is now !DirNam!
)