Как я могу извлечь путь и имя файла из переменной?
Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
Я хочу сделать это без использования какой-либо функции или любого GOTO. возможно ли это?
Как я могу извлечь путь и имя файла из переменной?
Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
Я хочу сделать это без использования какой-либо функции или любого GOTO. возможно ли это?
@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.
Вы можете извлечь только путь и имя файла из (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%
если вы хотите получать информацию от фактического запущенного пакетного файла, попробуйте следующее:
@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" ) также для параметров