Поиск и замена на командный файл - PullRequest
2 голосов
/ 29 октября 2008

Я пишу сценарий пакетного файла, используя команду Windows, и хочу изменить каждое вхождение некоторого пустого пространства с помощью "," Какой самый простой способ сделать это?

Ответы [ 3 ]

3 голосов
/ 30 октября 2008

Если ваши пользователи представляют собой список слов в одной строке в текстовом файле, разделенных пробелами, например:

one two three four

Создайте командный файл SpaceToComma.bat следующим образом:

@echo off
setlocal
for /F "tokens=* delims= " %%a in (%1) do @set data=%%a
echo %data: =,%
endlocal

Затем запустите его, вы получите слова, разделенные запятыми. Это то, что вы хотите?

C:\>SpaceToComma.bat data.txt
one,two,three,four

Если у вас есть многострочный файл, это будет сделано:

data.txt

one two three four
five six seven

SpaceToComma.bat

@echo off
setlocal
for /F "tokens=* delims= " %%a in (%1) do @call :processaline %%a
endlocal
goto :eof
:processaline
setlocal
set data=%*
echo %data: =,%
endlocal
goto:eof

выход

C:\>SpaceToComma.bat data.txt
one,two,three,four
five,six,seven

(Вероятно, есть умный способ сделать это без подпрограммы, используя синтаксис! Data! Для отложенного раскрытия переменных, но я не смог заставить его работать с синтаксисом подстановки.)

Если это не то, что вы хотите, пожалуйста, объясните, и я могу попытаться помочь.

(PS: я рад использовать пакетные файлы, когда люди настаивают, что это невозможно).

1 голос
/ 30 октября 2008

Вы можете скачать sed.exe из http://unxutils.sourceforge.net/ и запустить эту команду:

sed -e "s/ /,/" infile.txt >outfile.txt
0 голосов
/ 30 октября 2008

Ну, это будет во многом зависеть от того, как вы получаете данные, но вы можете найти что-то с помощью конструкции For-Do. Сделайте разделитель полей пробелом, а затем создайте строку обратно в do между каждым токеном. Могу ли я предложить более надежный язык сценариев? Вы должны иметь VBScript практически на любом относительно современном поклоне Windows.

...