誰かがバッチ スクリプトを手伝ってくれませんか。ファイル名またはディレクトリの最後の単語とスペースを削除できるスクリプトが必要です。
例えば:
スクリプトの実行後に作成される新しいフォルダーNew - 最後のスペースと単語を削除します。
誰かがバッチ スクリプトを手伝ってくれませんか。ファイル名またはディレクトリの最後の単語とスペースを削除できるスクリプトが必要です。
例えば:
スクリプトの実行後に作成される新しいフォルダーNew - 最後のスペースと単語を削除します。
@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に名前を変更するために を変更します。このルーチンは、何をしようとしているのかを単純に報告します。
補遺:
ちょっとした用語の難問があります。
についてはFILES、FILENAME.TXTファイルの「名前」と呼ぶことが多いですFILENAMEが、「名前」と.TXTはEXTENSIONです。
このプロセスが発生している場合、望ましい結果はFILENAME WITH SPACES.EXT、FILENAME 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ください - 最初のものだけが成功する可能性があります...)
これはうまくいくはずren *" "* *" "です。ただし、これによりそのディレクトリ内のすべてが変更されるため、注意してください。ファイルまたはフォルダーの最初の単語がわかっている場合は、これを使用できますren 1stword" "* *" "。