3

私の目的: Windows バッチ スクリプトを使用して、特定のディレクトリとサブディレクトリ内のすべてのファイルのファイル拡張子が小文字であることを確認します。

私はここまでたどり着くことができました(私が認めるほど遠くはありません!)。

for /R c:\test %%G in (*.*) do (
  echo %%G
)

これにより、拡張子(フルパスを含む)を持つすべてのファイルが正常に出力されますが、ファイル拡張子を確認して小文字であることを確認するにはどうすればよいですか(ちなみにファイル名を小文字にしたくない..拡張子だけ)。

前もって感謝します !

グレッグ

4

2 に答える 2

8

タスクを実行するために必要なテクニックは2つ(おそらく3つ)あります。

1)ファイル名とファイル拡張子を解析する必要があります。これはFORHELPで説明されているように簡単です。(HELP FORコマンドラインから入力)

  • %%~nG=ファイル名
  • %%~xG=ファイル拡張子

2)各ファイル拡張子を変数に格納し、次のようなコードを使用して小文字に変換する必要があります

for %%C in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "ext=!ext:%%C=%%C!"

setlocal enableDelayedExpansionスクリプトの上部で遅延拡張を有効にする必要があります。

検索と置換の検索部分では大文字と小文字が区別されないため、上記は機能します。

3)ファイル拡張子にが含まれている可能性が低い状況では!、ループ内で遅延拡張のオンとオフを切り替える必要があります。しかし、私はあなたがそのような状況に遭遇することを真剣に疑っています。

これは、ポイント3を無視して機能する完成したスクリプトです。

@echo off
setlocal enableDelayedExpansion
for /r "c:\test" %%F in (*) do if "%%~xF" neq "" (
  set "ext=%%~xF"
  for %%C in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "ext=!ext:%%C=%%C!"
  ren "%%F" "%%~nF!ext!"
)


バリCは彼の答えに興味深いアイデアを持っていましたが、それはうまくいきませんでした。一時フォルダにファイル拡張子のみで構成される名前の一時ファイルを作成することで、なんとか機能させることができました。しかし、それは上記の解決策よりも遅いです。

@echo off
setlocal
set "folder=%temp%\ren%random%"
md "%folder%"
for /r "c:\test" %%F in (*) do if "%%~xF" neq "" (
  copy nul "%folder%\%%~xF" >nul
  for /f "delims=" %%X in ('dir /b /l "%folder%"') do ren "%%F" "%%~nF%%X"
  del /q "%folder%"
)
rd "%folder%"
于 2012-10-05T16:03:08.750 に答える
1

これは急いでいますが、何かを処理する必要があります

for /r C:\Folder %%a in (*) do (
    for /f %%s in ('dir /b /l %%a') do (
        ren %%a %%~na%%~xs
    )
)

スイッチを使用したdirコマンドは/l小文字に変換しますが、私が行ったテストから、それが機能する場合と機能しない場合があります。

うまくいけば、これは別のメンバーによって改善される可能性がありますが、理論的には機能するはずです。

于 2012-10-05T16:02:47.400 に答える