誰かがバッチ スクリプトを手伝ってくれませんか。ファイル名またはディレクトリの最後の単語とスペースを削除できるスクリプトが必要です。
例えば:
スクリプトの実行後に作成される新しいフォルダー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" "* *" "
。