Вы можете сделать это в пакетном файле, если вы используете функцию, называемую «отсроченным расширением», которая не включена по умолчанию. Чтобы включить его, нужно запустить cmd.exe с ключом / v:
cmd.exe /v
Когда эта функция включена, следующий пакетный скрипт заменит все пробелы в %% i символами подчеркивания и выдаст результат:
for /f "usebackq tokens=*" %%i in (`dir /b`) do (
set S=%%i
set T=!S: =_!
echo !T!
)
*** Описание Vauge ... *** За исключением самого цикла for, интересными частями этого являются:
- Подстановка строк с использованием синтаксиса
%var:str1=str2%
- Задержка расширения с использованием
!var!
вместо %var%
Во-первых: отложенное расширение ... без этого интерпретатор команд (по какой-либо причине Microsoft решила закодировать его как) сначала оценит все параметры, а затем запустит скрипт: так что эта версия скрипта делает НЕ работает :
for /f "usebackq tokens=*" %%i in (`dir /b`) do (
set S=%%i
set T=%S: =_%
echo %T%
)
В этой версии переменная 'T' устанавливается на последнее значение цикла for до того, как содержимое блока (...) будет фактически выполнено. Что не имеет смысла для меня. Таким образом, с включенным отложенным выполнением мы можем использовать метки переменных отложенного выполнения, то есть! Var! а не% var%. Что дает нам правильный результат.
Другой умный бит - это set T=!S: =_!
(который в основном говорит, что устанавливает T в S, заменяя каждое '' 'в S на' _ '). Без отложенного расширения это будет написано set T=%S: =_%
.