it-roy-ru.com

Удаление пробелов из переменной в пакете

Я пишу файл для удаления пробелов из имен файлов в папке, а затем помещаю результат в файл .txt. Я просто получаю результат "Эхо включено". вновь и вновь. 

Это то, что я до сих пор:

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

Может кто-нибудь сказать мне, что не так?

9
user2313522

Причина, по которой вы получаете ECHO is on., заключается в том, что отложенное расширение не использовалось, из-за чего значения %var% и %MyVar% были вставлены до запуска команды for, а поскольку они не были определены в начале, в них были вставлены пустые переменные. echo %MyVar%>>text.txt был запущен, он был интерпретирован как echo >>text.txt. Когда echo запускается без каких-либо аргументов, он выводит, включено или выключено echo, что вы и получаете в text.txt.

Чтобы решить проблему, вы должны сделать две вещи:

Во-первых, что-то не так с вашей второй строкой. В setlocal нет места между set и local. Вторая строка должна быть 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: =!.

8
user2033427

Удаление всех пробелов (не только начальных и конечных) может быть выполнено без использования setlocal enabledelayedexpansion со следующей строкой:

set var=%var: =%

Это работает, заменяя все пробелы в строке пустой строкой.

Источник: DOS - Манипулирование строками

30
zr870

Неправильно то, что вы включили расширение переменной (вы плохо написали ...), а также не используете его, когда вы используете enabledelayedexpansion, вам нужно написать имена переменных следующим образом:! Variable! вместо этого:% Variable%

Но вам не нужно использовать его с этим кодом:

@echo ON
For %%# in (*) do (
    SET "var=%%~n#"
    Call Set "MyVar=%%var: =%%"
    Call echo %%MyVar%%>>text.txt
)
1
ElektroStudios

Запустите следующий пакет в папке, содержащей файлы для переименования

    @echo off
    setlocal enabledelayedexpansion
    for %%j in (*.*) do (
    set filename=%%~nj
    set filename=!filename=.=_!
    set filename=!filename= =_!
    if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
    )

вам просто нужно добавить печать в TXT

0
nfrignani