14

フォルダー内のファイル名からスペースを削除し、結果をファイルに入れるファイルを作成してい.txtます。「エコーがオンです」という結果が得られます。何度も。

これは私がこれまでに持っているものです:

@echo ON
SET LOCAL EnableDelayedExpansion
For %%# in (*.*) do (
    SET var=%%~n#
    Set MyVar=%var%
    set MyVar=%MyVar: =%
    echo %MyVar%>>text.txt
)

誰かが何が悪いのか教えてもらえますか?

4

4 に答える 4

69

setlocal enabledelayedexpansionすべてのスペース (先頭と末尾だけでなく) を削除するには、次の行を使用しなくても実行できます。

set var=%var: =%

これは、文字列内のすべてのスペースを空の文字列に置き換えることで機能します。

ソース: DOS - 文字列操作

于 2015-06-17T16:19:25.763 に答える
13

取得してECHO is on.いる理由は、遅延展開が使用されなかったため、コマンドが実行される前に%var%andの値が挿入され、開始時に定義されていなかったため、空の変数が挿入されたためです。と解釈されました。引数なしで echo を実行すると、 echo がオンかオフかが出力されます。%MyVar%forecho %MyVar%>>text.txtecho >>text.txttext.txt

この問題を解決するには、次の 2 つのことを行う必要があります。

まず、2行目に何か問題があります。の set と local の間にスペースはありませんsetlocal。2 行目はSETLOCAL EnableDelayedExpansion.

%次に、遅延展開を使用するには、各変数のすべての を の!ように に置き換える必要が!var!あります%var%

最終結果:

@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
    SET var=%%~n#
    Set MyVar=!var!
    set MyVar=!MyVar: =!
    echo !MyVar!>>text.txt
)

この場合、実際には一時変数を使用する必要はありません 。実行しSET MyVar=%%~n#て にスキップできますset MyVar=!MyVar: =!

于 2013-04-29T10:37:29.153 に答える
1

間違っているのは、変数展開を有効にして (書き方が悪かった...)、それを使用していないということです。これ以外の代わりに: %Variable%

ただし、次のコードでは使用する必要はありません。

@echo ON
For %%# in (*) do (
    SET "var=%%~n#"
    Call Set "MyVar=%%var: =%%"
    Call echo %%MyVar%%>>text.txt
)
于 2013-04-29T10:38:57.570 に答える