0

誰かがバッチ スクリプトを手伝ってくれませんか。ファイル名またはディレクトリの最後の単語とスペースを削除できるスクリプトが必要です。
例えば:

スクリプトの実行後に作成される新しいフォルダーNew - 最後のスペースと単語を削除します。

4

2 に答える 2

0
@ECHO OFF
SETLOCAL enabledelayedexpansion
FOR %%t IN (*) DO (
  CALL :process "%%~nt"
  IF DEFINED success ECHO REN "%%t" "!success!%%~xt"
  )
GOTO :eof

:process
SET "success=%~1"
:procloop
SET "lastchar=%success:~-1%"
SET "success=%success:~0,-1%"
IF NOT DEFINED success GOTO :EOF 
IF NOT "%lastchar%"==" " GOTO procloop
:: Remove any other trailing spaces
:rtsloop
SET "lastchar=%success:~-1%"
SET "success=%success:~0,-1%"
IF "%lastchar%"==" " GOTO rtsloop
SET "success=%success%%lastchar%"
GOTO :eof

これは、ほとんどの「通常の」名前のトリックを行うはずです。!andのような非常に少数の文字を含む名前では失敗する可能性があり^ますが、そのようなファイル/ディレクトリ名はばかげています。

ファイルではなくディレクトリを処理するには、FORを aに変更します。FOR /d

基本的にNAME、...name の部分は引用符で囲まれてルーチンに渡され:process、スペースが保持されます。ルーチンは、最初にスペースが見つかるまで最後の文字を削除し、その後、さらにスペースを削除し続けます。

名前にスペースが含まれていない場合はsuccess空になり、未定義になります。それ以外の場合は、新しい名前が付けられます。

検証後、ECHO REN単純RENに名前を変更するために を変更します。このルーチンは、何をしようとしているのかを単純に報告します。


補遺:

ちょっとした用語の難問があります。

についてはFILESFILENAME.TXTファイルの「名前」と呼ぶことが多いですFILENAMEが、「名前」と.TXTはEXTENSIONです。

このプロセスが発生している場合、望ましい結果はFILENAME WITH SPACES.EXTFILENAME WITH.EXTファイルの EXTENSION または TYPE を保持することです。

DIRECTORY 名では、「EXTENSION」の考え方が引き続きサポートされているため、 の拡張子Folder 18.9.0.17と見なされます (拡張子は、最後の の後に発生するものです)Folder 18.9.0.17.

解決策は非常に簡単です。名前の変更に拡張子を追加しないでください。

  IF DEFINED success ECHO REN "%%t" "!success!"

(ただし、Folder 18.9.0.17, Folder 18.9.0.18,Folder 18.9.0.19すべて、ここでターゲットの名前を変更することに注意してFolderください - 最初のものだけが成功する可能性があります...)

于 2013-03-26T11:24:14.767 に答える
0

これはうまくいくはずren *" "* *" "です。ただし、これによりそのディレクトリ内のすべてが変更されるため、注意してください。ファイルまたはフォルダーの最初の単語がわかっている場合は、これを使用できますren 1stword" "* *" "

于 2013-03-26T10:58:57.753 に答える