2013-03-22 4 views
42

Как я могу извлечь путь и имя файла из переменной?Batch Извлечение пути и имя файла из переменной

Setlocal EnableDelayedExpansion 
set file=C:\Users\l72rugschiri\Desktop\fs.cfg 

Я хочу сделать это без использования каких-либо функций или любого GOTO. Возможно ли это?

+2

Возможный дубликат [Как разделить имя файла из полного пути в партии?] (http://stackoverflow.com/questions/9252980/how-to-split-the-filename-from-a-full-path-in-batch) – iTayb

ответ

94
@ECHO OFF 
SETLOCAL 
set file=C:\Users\l72rugschiri\Desktop\fs.cfg 
FOR %%i IN ("%file%") DO (
ECHO filedrive=%%~di 
ECHO filepath=%%~pi 
ECHO filename=%%~ni 
ECHO fileextension=%%~xi 
) 

Не действительно уверен, что вы имеете в виду не «функции»

Очевидно, что изменить ECHO в SET установить переменные, а тунце вторя их ...

См http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx для полного список.

+2

Это не работает для путей файлов с пробелами – meir

+1

@meir - true ; Я опубликовал исправление. Вы многому учитесь через пару лет. – Magoo

+0

@TrivisionZero: Нет, кавычки необходимы в том случае, если имя файла или путь содержит пробелы. – Magoo

85

Вы можете только извлечь путь и имя файла из (1) параметр самого ВАТ %1, или (2) параметра вызова %1 или (3) локальный для переменной %%a.


в HELP CALL или HELP FOR вы можете найти более подробную информацию:

% ~ 1 - расширяет% 1 удаление любой окружающую кавычки (")
% ~ f1 - Расширяет%-полностью квалифицированный имя пути
% ~ d1 - расширяется% 1 на букву диска только
% ~ p1 - расширяющуюся% 1 путь только
% ~ n1 - расширяющийся% 1 к имени файла только
% ~ x1 - расширяет% 1 расширение файла только
% ~ s1 - развёрнутый путь содержит короткие имена только
% ~ a1 - расширяет% 1 к атрибутам файла
% ~ t1 - расширяется% 1 дата/время файла
% ~ z1 - расширяется% 1 размер файла


а потом попробуйте следующее:

Либо передать строку, которая будет анализироваться в качестве параметра к вызову

call :setfile ..\Desktop\fs.cfg 
echo %file% = %filepath% + %filename% 
goto :eof 

:setfile 
set file=%~f1 
set filepath=%~dp1 
set filename=%~nx1 
goto :eof 

или эквивалент, передать имя файла в качестве локального переменного для

for %%a in (..\Desktop\fs.cfg) do (
    set file=%%~fa 
    set filepath=%%~dpa 
    set filename=%%~nxa 
)  
echo %file% = %filepath% + %filename% 
1

если вы хотите Информацию о реальном работающем командном файле, попробовать это:

@echo off 
set myNameFull=%0 
echo myNameFull  %myNameFull% 
set myNameShort=%~n0 
echo myNameShort %myNameShort% 
set myNameLong=%~nx0 
echo myNameLong  %myNameLong% 
set myPath=%~dp0 
echo myPath   %myPath% 
set myLogfileWpath=%myPath%%myNameShort%.log 
echo myLogfileWpath %myLogfileWpath% 

более образцы? C:> HELP CALL

% 0 = параметр 0 = пакетный файл % 1 = параметр 1 - 1-й пар. передается в пакетный файл ... поэтому вы можете попробовать этот материал (например, «~ dp») между 1-м (например, «%») и последним (например,«1») и для параметров

3

Все это работает для меня:

@Echo Off 
Echo Directory = %~dp0 
Echo Object Name With Quotations=%0 
Echo Object Name Without Quotes=%~0 
Echo Bat File Drive = %~d0 
Echo Full File Name = %~n0%~x0 
Echo File Name Without Extension = %~n0 
Echo File Extension = %~x0 
Pause>Nul 

Выход:

Directory = D:\Users\Thejordster135\Desktop\Code\BAT\ 

Object Name With Quotations="D:\Users\Thejordster135\Desktop\Code\BAT\Path_V2.bat" 

Object Name Without Quotes=D:\Users\Thejordster135\Desktop\Code\BAT\Path_V2.bat 

Bat File Drive = D: 

Full File Name = Path.bat 

File Name Without Extension = Path 

File Extension = .bat 
Смежные вопросы