Як я можу витягти шлях та ім'я файлу зі змінної?
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 їх ...
Повний список дивіться у for
документації .
Тест Чезка (для довідки)
@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
)
Коментар: будь ласка, дивіться коментарі.
/f
.
Ви можете витягти шлях та ім'я файлу лише з (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
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
якщо ви хочете отримати інформацію з фактичного запущеного файлу, спробуйте:
@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:> ДОПОМОГА
% 0 = параметр 0 = пакетний файл% 1 = параметр 1 - 1-й пар. передається в пакетний файл ... так що ви можете спробувати цей матеріал (наприклад, "~ dp") між 1-м (наприклад, "%") і останнім (наприклад, "1") також для параметрів
Пізня відповідь, я знаю, але для мене наступний сценарій досить корисний - і він також відповідає на питання, вдаривши двох мух одним прапором ;-)
Наступний сценарій розширює SendTo у контекстному меню провідника файлів:
@echo off
cls
if "%~dp1"=="" goto Install
REM change drive, then cd to path given and run shell there
%~d1
cd "%~dp1"
cmd /k
goto End
:Install
rem No arguments: Copies itself into SendTo folder
copy "%0" "%appdata%\Microsoft\Windows\SendTo\A - Open in CMD shell.cmd"
:End
Якщо запустити цей сценарій без будь-яких параметрів, двічі клацнувши на ньому, він скопіюється в папку SendTo та перейменує його на "A - Відкрити в CMD shell.cmd". Згодом він доступний у контекстному меню "SentTo".
Потім клацніть правою кнопкою миші будь-який файл або папку в провіднику Windows і виберіть "SendTo> A - Open in CMD shell.cmd"
Сценарій змінить диск і шлях до шляху, що містить вибраний файл або папку, і відкриє командну оболонку з цим шляхом - корисно для коду Visual Studio, оскільки тоді ви можете просто ввести "код". щоб запустити його в контексті вашого проекту.
Як це працює?
%0
- повний шлях пакетного сценарію
%~d1
- диск, що міститься в першому аргументі (наприклад, "C:")
%~dp1
- шлях, що міститься в першому аргументі
cmd /k
- відкриває командну оболонку, яка залишається відкритою
Тут не використовується, але %~n1
це ім'я файлу першого аргументу.
Сподіваюся, це комусь корисно.