0

二重のファイル拡張子と通常のファイル拡張子を持つファイルを含むフォルダーがいくつかあります。すべてのフォルダーを検索し、拡張子が 2 つあるファイルの最後の拡張子を削除するバッチ スクリプトを作成する必要があります。どのファイル拡張子も一貫していません。

Here's an example

C:\test\regular.exe
C:\test\picture.jpg.doc
C:\newtest\document.doc.pdf

End Result I need

C:\test\regular.exe
C:\test\picture.jpg
C:\newtest\document.doc
4

2 に答える 2

1
@ECHO OFF
SETLOCAL

SET sourcedir=c:\sourcedir
FOR /r "%sourcedir%" %%i IN (*.*) DO (
 FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF NOT EXIST "%%~dpni" ECHO REN "%%~fi" "%%~ni"
 FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%%~dpni" ECHO CAN NOT REN "%%~fi" "%%~ni"
)

GOTO :EOF

このバッチは、タスクを完了する必要があります。

sourcedirをルートとするツリー内の各ファイルについてNAME、ファイル自体に「拡張子」が含まれていて、元の拡張子のないファイル名が存在しない場合は、ファイルの名前を変更します。そうすれば、...picture.jpg.docが見つかった場合、 が...picture.jpg存在しない場合にのみ名前変更が行われます。

名前を変更するコマンドは単にECHOed です。ECHO名前の変更を有効にするには、キーワードを削除する必要があります-それが目的であることを確認した後。

既存のファイルが原因で名前を変更できなかったことを報告する 2 行目を追加しました。


単純な名前変更ができない場合に備えて名前を変更するように修正。

注意 - このバージョンはすぐに名前を変更します -ECHOファイルの名前を変更すると、メインの名前変更の実行で異なる結果が生じる可能性がある場合に、そのようなリストを提供するのはナンセンスであるため、最初にリストを提供する必要はありません。

@ECHO OFF
SETLOCAL

SET sourcedir=c:\sourcedir
FOR /r "%sourcedir%" %%i IN (*.*) DO (
 FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%%~dpni" (
  SET renreq=Y
  FOR %%a IN (new alt extra another 1 2 3 4 5 6 7 8 9) DO IF DEFINED renreq (
   IF NOT EXIST "%%~dpi%%~nn_%%a%%~xn" (
    REN "%%~fi" "%%~nn_%%a%%~xn"
    SET "renreq="
   )
  )
  IF DEFINED renreq ECHO CAN NOT REN "%%~fi"
 ) ELSE (
 REN "%%~fi" "%%~ni"
 )
)

GOTO :EOF

当然のことながら、必要に応じて「その他」のリストを拡張できます。

于 2013-05-10T16:32:55.567 に答える
1

これを試してecho、出力が問題ない場合は、を削除します。

@echo off &setlocal
for /r \ %%i in (*) do (
    for %%j in ("%%~ni") do if "%%~xj" neq "" echo ren "%%~fi" "%%~nj"
)

編集: HD 全体のサポートを追加しました。

于 2013-05-10T16:28:02.333 に答える