манипулирование символами строки в пакетных файлах? - PullRequest
2 голосов
/ 08 октября 2008

Есть ли способ взять подстроки строки с файлами .bat / .cmd?

Например, учитывая строку "hello.txt", есть ли способ убрать .txt?

РЕДАКТИРОВАТЬ: Также есть ли более общий способ сделать это, не предполагая, что это имя файла или путь к файлу?

Ответы [ 7 ]

8 голосов
/ 08 октября 2008

Если это файл, переданный в качестве параметра, вы можете использовать% ~ n1, например:

test.bat
----------
echo %~n1 %~n2

c:\> test.bat myfile.txt my.long.file.bat
  myfile my.long.file

Если вы знаете длину строки, вы можете использовать оператор подстроки:

echo %variable:0,4%   =>  "test.txt" => "test"

И чтобы получить все, кроме последних 4 символов:

echo %variable:~0,-4%  => "file...name.txt" => "file...name"
3 голосов
/ 08 октября 2008

Общий синтаксис подстроки в файлах .cmd (и файлах .bat после Win95):

%variable:~num_chars_to_skip,num_chars_to_keep%

Эта страница предоставляет дополнительные параметры: VarSubstring

2 голосов
/ 08 октября 2008

Для подстроки и других интересных методов «подстановки переменных» вы можете получить помощь:

set /?

Для разбора строки (например, нахождение '.' В строке) попробуйте

для /?

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

Лучший способ - просто установить python (или perl) Поверьте, я перепробовал практически все, и это просто головная боль - манипулировать текстом в DOS (или вообще чем-либо еще).

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

Попробуйте help set для некоторой обработки строки, доступной для cmd.exe. Справка по set включает в себя то, что вы можете делать в обычном режиме, кроме команды set

Вы можете делать такие вещи, как

set source=hello.txt
REM print hello
echo %source:~0,-4%
REM print o.t
echo %source:~4,3%
REM print help.txt
echo %source:lo=p%
REM etc
echo %source:llo=%

Возможно, что-то не так в коде выше. Я пишу это из памяти, без cmd.exe доступного для тестирования.

0 голосов
/ 24 октября 2008

Вы также можете посмотреть документацию для вызова (call /?) Для получения информации о файлах и каталогах, относящихся к подстроке.

0 голосов
/ 08 октября 2008

Для произвольной строки я так не думаю.

Для этого самого примера %~n1 разрешит имя без расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...