Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Отсечение пути.Как?Или получение относительного пути.

Ответить
Настройки темы
CMD/BAT - [решено] Отсечение пути.Как?Или получение относительного пути.

Старожил


Сообщения: 151
Благодарности: 4

Профиль | Отправить PM | Цитировать


Всем привет!
Вот мы имеем такой простой код который выводит полные пути ко всему что есть в папке
Код: Выделить весь код
@echo off
FOR /F "tokens=*" %%A IN ('dir /s /b /a-d "%~n1\*.*"') DO echo "%%A"
pause
или
Код: Выделить весь код
@echo off
set path_1=D:\test\a
FOR /F "tokens=*" %%A IN ('dir /s /b /a-d "%path_1%\*.*"') DO echo "%%A"
pause
Получаем результат
D:\test\a\test.exe
D:\test\a\abc.txt
D:\test\a\fold1\qwer.bat
D:\test\a\fold1\dir\start.7z
D:\test\a\test_dir\dell.dll

Но мне на выходе нужно получить
test.exe
abc.txt
fold1\qwer.bat
fold1\dir\start.7z
test_dir\dell.dll

как это реализовать?

Отправлено: 05:58, 21-02-2014

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


nfs911,
Код: Выделить весь код
... echo %%~nxA
Код: Выделить весь код
for /?
call /?
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:24, 21-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 151
Благодарности: 4

Профиль | Отправить PM | Цитировать


Foreigner,
Цитата Foreigner:
%%~nxA »
переменная раскроется в имя файла и его расширение

А значит я получу вместо желаемого результата
test.exe
abc.txt
qwer.bat
start.7z
dell.dll

Напомню что мне нужно получить

test.exe
abc.txt
fold1\qwer.bat
fold1\dir\start.7z
test_dir\dell.dll

Отправлено: 08:39, 21-02-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sRootFolder=C:\Temp

if exist "%sRootFolder%\." (
	for /f "usebackq delims=" %%i in (
		`dir /b /s /a:-d "%sRootFolder%\*.*"`
	) do (
		set sVar=%%~i
		set sPath=!sVar:%sRootFolder%\=!
		echo [!sPath!]
	)
) else (
	echo Folder [%sRootFolder%] not found.
	exit /b 1
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:48, 21-02-2014 | #4


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off

set path_1=D:\test\a
set virt_disk=B:

subst %virt_disk% "%path_1%"|| exit /b
for /f "usebackq tokens=* delims=\" %%B in (`
 for /f ^"tokens^=*^" %%A in ^('dir /s /b /a-d %virt_disk%\'^) do @echo %%~pnxA
`) do (
echo %%B
)
subst %virt_disk% /d
pause>nul
exit /b

Последний раз редактировалось Georgio, 21-02-2014 в 15:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:48, 21-02-2014 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата nfs911:
Напомню что мне нужно получить
test.exe
abc.txt
fold1\qwer.bat
fold1\dir\start.7z
test_dir\dell.dll »
Сорри, прочитал названия двух верхних файлов и понял вопрос не так.
Код: Выделить весь код
@echo off
setlocal

subst s: "d:\test\a"
pushd s:\
for /f "tokens=*" %%i in ('dir /b /s /a-d ') do echo %%~pnxi
popd
subst s: /d
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:14, 21-02-2014 | #6


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Код: Выделить весь код
@echo off
setlocal
subst s: "d:\test\a"
pushd s:\
for /f "tokens=*" %%i in ('dir /b /s /a-d ') do echo %%~pnxi
popd
subst s: /d
»
Foreigner, в Вашем выводе в начале каждой строки присутствует обратный слеш:

Код: Выделить весь код
\abc.txt
\test.exe
\fold1\qwer.bat
\fold1\dir\start.7z
\test_dir\dell.dll

В этом же решении обратного слеша в начале каждой строки нет:

Цитата Georgio:
Код: Выделить весь код
@echo off
set path_1=D:\test\a
set virt_disk=B:
subst %virt_disk% "%path_1%"|| exit /b
for /f "usebackq tokens=* delims=\" %%B in (`
 for /f ^"tokens^=*^" %%A in ^('dir /s /b /a-d %virt_disk%\'^) do @echo %%~pnxA
`) do (
echo %%B
)
subst %virt_disk% /d
pause>nul
exit /b
»

Цитата nfs911:
Напомню что мне нужно получить
test.exe
abc.txt
fold1\qwer.bat
fold1\dir\start.7z
test_dir\dell.dll
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:47, 21-02-2014 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Georgio, но всё равно, согласитесь — решение с subst'ом изящное . Первый слэш можно отсечением убирать.

Отправлено: 21:04, 21-02-2014 | #8


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата Iska:
Georgio, но всё равно, согласитесь — решение с subst'ом изящное. »
Конечно, согласен. Приоритет ведь за мной:

Цитата Georgio:
Код: Выделить весь код
set virt_disk=B:

subst %virt_disk% "%path_1%"|| exit /b
»

Цитата:
Первый слэш можно отсечением убирать.
Что и было сделано:

Цитата Georgio:
Код: Выделить весь код
for /f "usebackq tokens=* delims=\" %%B in (`
 for /f ^"tokens^=*^" %%A in ^('dir /s /b /a-d %virt_disk%\'^) do @echo %%~pnxA
`) do (
echo %%B
)
»
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:45, 21-02-2014 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Georgio, Слеш можно и не убирать, добавь точку и будет относительный путь. Например:
Код: Выделить весь код
... do echo .%%~pnxi
Что и заявлено в названии топика

Последний раз редактировалось Foreigner, 21-02-2014 в 22:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:32, 21-02-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Отсечение пути.Как?Или получение относительного пути.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Отказано в доступе к указанному устройству, пути или файлу. m4r47 Лечение систем от вредоносных программ 2 13-12-2012 13:14
Ошибка - Отказано в доступе к указанному устройству, пути или файлу. few ds Microsoft Windows 2000/XP 23 08-02-2012 14:59
Ошибка - отказано в доступе к указанному устройству пути или файлу. CoF_TuZ Лечение систем от вредоносных программ 8 16-01-2012 23:15
Доступ - Отказано в доступе к указанному устройству, пути или файлу. webb23 Microsoft Windows 7 1 22-10-2011 14:01
Доступ - Отказано в доступе к указанному устройству пути или файлу... Nautical Microsoft Windows 7 2 18-04-2010 11:57




 
Переход