Разбор строки командной строки Windows: папка и имя файла в строке - PullRequest
4 голосов
/ 06 июля 2011

Существует ли быстрый способ получить имя файла и последнюю папку по полному пути к файлу (строке) в командной строке Windows?

Я ожидаю ввода -> результаты:

"c:\test\1\2\test.txt" -> "2", "test.txt"  
"c:\test\1\2\3\a.txt" -> "3", "a.txt"  
"c:\test\0\b.txt" -> "0", "b.txt"  
"c:\c.txt" -> "", "c.txt"

Я бился головой об этом, используя FOR / F, но, поскольку полный путь может быть любой длины, я не могу понять это.

Ответы [ 3 ]

5 голосов
/ 06 июля 2011

Попробуйте это:

for %I in (c:\test\1\2\3\a.txt) do set path=%~pI
for %I in (c:\test\1\2\3\a.txt) do set file=%~nxI
set pth2=%path:~0,-1%
for %I in (%pth2%) do set lastdir=%~nxI
echo %file% %lastdir%

Справочник по командной строке Windows - ваш друг.

4 голосов
/ 06 июля 2011

FOR / TOKENS будет работать, если путь будет полностью изменен;

echo off
set apath=c:\test\1\2\3\a.txt

call :reverse "%apath%"
for /f "tokens=1,2 delims=\\" %%a in ("%reverse.result%") do set afile=%%a&set adir=%%b

call :reverse "%apath%"
set apath = %reverse.result%

call :reverse "%afile%"
set afile= %reverse.result% 

rem handle no dir;
if "%adir:~0,1%"==":" set adir=

echo File: %afile%
echo Dir:  %adir%
goto:eof  

:reverse
  set reverse.tmp=%~1
  set reverse.result=
  :reverse.loop
    set reverse.result=%reverse.tmp:~0,1%%reverse.Result%
    set reverse.tmp=%reverse.tmp:~1,999%
    if not "%reverse.tmp%"=="" goto:reverse.loop
goto:eof
eof:

Для

File: a.txt
Dir:  3
0 голосов
/ 04 сентября 2015

Исходя из ответа @deStrangis, вот решение, которое я нашел:

@ECHO OFF
SETLOCAL

CALL :get_path "C:\test\1\2\3\a.txt"

GOTO last

:get_path
:: get file path
SET _path=%~p1
:: get file name and extension
SET _name=%~nx1
:: remove trailing backslash from path
SET _path=%_path:~0,-1%
:: trim path
CALL :trim_path %_path%
:: output
ECHO %_path% %_name%
GOTO :eof

:trim_path
:: get file name from a path returns the last folder
SET _path=%~n1
GOTO :eof

:last
ECHO ON
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...