обработка пакетной строки dos

#batch-file #dos

#пакетный файл #dos

Вопрос:

Я пытаюсь написать какой-нибудь пакетный скрипт dos для манипулирования некоторыми путями. Я не делал этого годами, поэтому я могу быть ржавым.

Путь является относительным и задается из командной строки в качестве аргумента

 @echo off
set wpath=%1
@echo.%wpath%
set newpath=%wpath:~0,-4%
@echo.%newpath%
  

То, что я пытаюсь выполнить, — это избавиться от расширения

 script.bat whatever/test.txt
whatever/test.txt
whatever/test
  

Но я получаю

 script.bat whatever/test.txt
whatever/test.txt
<emptyline>
  

Я использую dosemu-1.4.0.1 / DOSBox-0.74 и это в качестве ссылки

Комментарии:

1. Это правильно — я только что дважды проверил свой CMD, и он работал, как ожидалось. Я могу только предположить, что dosemu неправильно эмулирует команды!

2. Хм, это то, чего я боялся. Любые другие способы, которыми я могу этого добиться?

3. Все, о чем я могу думать на данный момент, это (если у вас есть представление о том, какие файлы будут переданы), замените строку для всех возможных расширений… ie set path=%path:.txt =% …. задайте путь =%путь:.pdf=% … и т. Д. — Дайте мне знать, если найдете другой способ или поищите другой эмулятор!

Ответ №1:

Вы могли бы проверить пределы dosemu, может ли он справиться
echo %path:~0,4% (только положительные результаты), чем вам нужно только получить длину строки
, или вы можете попробовать
for %%A in ("%path%") do echo %%~dpnA

Комментарии:

1. первый возвращает <пустую строку>, второй — %dpnA

2. Вы тестируете второй в командной строке (только один процент) или в пакете (требуется двойной процент)

3. C:>for %A in ("%path%") do echo %~dpnA C:>echo %~dpnA %~dpnA C:>

Ответ №2:

По-видимому, это расширения wimcmd, и их нельзя найти в DOS, если кто-нибудь все еще доберется сюда 🙂