В пакетном режиме: чтение только имени файла из переменной с путем и именем файла

В настоящее время я ищу способ взять переменную в пакетном режиме и проанализировать только имя файла.

Например, я передаю пакетный файл в качестве параметра -s из другого приложения, которому впоследствии присваивается моя исходная переменная. Переменная исходного файла обычно содержит что-то вроде: C:\Program Files\myapp\Instance.1\Data\filetomove.ext.

Я предполагаю читать с конца переменной до первого «\» и устанавливать результат в новое имя файла переменной, но мне не удалось успешно использовать команду «for/f».

Любая помощь приветствуется!

Обновление: доступны только стандартные XP или Windows 2000/2003... (не могу предположить, что установлены наборы ресурсов).


person Michael    schedule 18.01.2009    source источник


Ответы (2)


Если он входит в качестве аргумента скрипта, т. е. %1, %2 и т. д., вы можете извлечь только имя файла и расширение в переменную следующим образом:

set FILENAME=%~nxN

где N — индекс аргумента. Например, этот скрипт будет отображать только имя файла первого аргумента:

@echo off
set FILENAME=%~nx1
echo %FILENAME%
person Dave Ray    schedule 18.01.2009
comment
Спасибо! Я перечитывал справку и слишком усложнял инструкции %~nxI. Спасибо!!!! - person Michael; 18.01.2009
comment
Ага. Эти инструкции действительно довольно отстойные, если вам посчастливится их найти. - person Dave Ray; 18.01.2009
comment
+1 собирался спросить об этом, у SO есть отличный детектор повторяющихся вопросов :-) - person Wim Coenen; 05.03.2009
comment
К сожалению, эта инструкция кажется неработающей, если внутри имени есть символ &. У меня только что была проблема с каталогом под названием NGC&Wii. Очевидно, что можно изменить имя, но в некоторых ситуациях вам может быть запрещено его менять. - person Cyan; 28.10.2011

Немного улучшенная версия:

set FILENAME="%~nx1"

Дополнительные скобки гарантируют, что специальные символы, такие как '&', не будут мешать во время пакетного выполнения.

person Cyan    schedule 27.10.2011