Подтвердить что ты не робот

Batch Извлечение пути и имя файла из переменной

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

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

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

4b9b3361

Ответ 1

@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, чтобы установить переменные, а не ECHOing их...

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

Ответ 2

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


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

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


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

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

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

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

или эквивалент, передайте имя файла как локальную переменную FOR

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

Ответ 3

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

@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" ) также для параметров