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



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



Setlocal EnableDelayedExpansion
set file=C:Usersl72rugschiriDesktopfs.cfg


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

630   4  

4 ответов:

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

посмотреть forдокументация полный список.


тестовый случай ceztko (для справки)

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

комментарий : см. комментарий.

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


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

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


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

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

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%

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

@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

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

@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%

Comments

    Ничего не найдено.