Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/43: Рейтинг темы: голосов - 43, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37

Получить полный путь к папке, заданной двумя точками

24.01.2013, 08:50. Показов 8288. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть путь, заданный через точки:
C:\helloworld\test\..\124\log.txt
Многими командами он автоматически раскроется в следующее:
C:\helloworld\124\log.txt
Мне нужно использовать команду START, а она не понимает пути с точками.
Есть ли какой-то легкий способ получить из пути с точками путь без точек?

START %log%
Вместо START использовать CALL не подходит по некоторым причинам.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2013, 08:50
Ответы с готовыми решениями:

Получить полный путь к папке
Возможно ли как-то получить полный путь к папке (есть только её название) находящейся на определенном жестком диске?

Передать в скрипт полный путь к файлу/папке
Как можно передать в скрипт путь к папке или файлу не используя консоль? Когда-то натыкался на скрипт, если на него перетащить файл, то...

Файл: Получить полный путь к файлу и записать этот путь в отдельную переменную.
Доброго времени суток.Столкнулся с проблемой в ходе выполнения задачи. Мне нужно получить полный путь к файлу и записать этот путь в...

9
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 48
24.01.2013, 08:58
У меня на win-7 вообще не создается папка с точками. Где ты такой путь нашел?
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
24.01.2013, 09:58
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от lica Посмотреть сообщение
У меня на win-7 вообще не создается папка с точками. Где ты такой путь нашел?
Точки - это путь на уровень выше

У меня на вынь-7 открывает. И на XP раньше открывала. Более того, имя папки перед \..\ роли не играет. Это может быть несуществующая папка и даже имя файла. Один из фокусов - командному файлу передаётся имя файла в %1. Тогда %1\..\ будет папка с файлом. Можно, конечно, сделать короче %~dp1, но через .. должно работать даже в вынь-9х. Или если имя файла в переменной.

Или так
Code
1
2
3
4
5
6
7
8
@echo off
call :fullname fn C:\helloworld\test\..\124\log.txt
echo %fn%
 
goto:eof
:fullname
set %1=%~f2
goto:eof
3
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
24.01.2013, 11:35  [ТС]
То, что нужно!
А как
call :fullname fn
понимает, что fn дальше можно юзать как переменную
echo %fn%
?

Не нашел объяснения в справке CALL /?
Объясните?
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
24.01.2013, 11:51
Цитата Сообщение от sdsdsdsdd Посмотреть сообщение
call :fullname fn
Цитата Сообщение от sdsdsdsdd Посмотреть сообщение
Объясните?
передать в блок fullname значение fn (цифра, слово, переменная)
чтобы получить переменную из значения, её нужно задать в блоке fullname
Code
1
set new=%1
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.01.2013, 22:33
Не такая красивая, но альтернатива, если была бы задана только папка:

Bash
1
2
3
4
5
@echo off
pushd "C:\helloworld\test\..\124"
if %errorlevel%==0 set fn=%cd%
echo %fn%\log.txt
popd
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
25.01.2013, 10:41
Цитата Сообщение от sdsdsdsdd Посмотреть сообщение
То, что нужно!
А как понимает, что fn дальше можно юзать как переменную ?

Не нашел объяснения в справке CALL /?
Объясните?
Вызов fullname
call :fulname имя_переменной путь_с_точками
имя переменной передаётся первым параметром, путь - вторым. Если путь содержит пробелы, его надо заключить в кавычки. А далее переданные параметры подставляются в команду set:
set %1=%~f2

Способ можно использовать для различных целей, например, получить размер файла
Code
1
2
3
4
goto:eof
:filesize
set %1=%~z2
goto:eof
строка goto:eof перед подпрограммой - для надёжности.

Некоторые предпочитают для подобных целей for
Code
1
2
3
@echo off
for %%f in ( "C:\helloworld\test\..\124\log.txt" ) do set fullname=%%~ff
echo %fullname%
1
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
25.01.2013, 12:48
Цитата Сообщение от Smitis Посмотреть сообщение
Некоторые предпочитают для подобных целей for
Это лучше, так как call по-сути для запуска функции запускает новый файл и перемещается на указанную метку. Данный способ сильно тормозит, поэтому не для использования внутри циклов
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
25.01.2013, 13:50
Цитата Сообщение от FraidZZ Посмотреть сообщение
Это лучше, так как call по-сути для запуска функции запускает новый файл и перемещается на указанную метку. Данный способ сильно тормозит, поэтому не для использования внутри циклов
В данном случае (call :метка) никаких новых файлов не запускает.
В отличие от call файл
call /?
Команда CALL допускает использование меток в качестве
адресата вызова. Применяется следующий синтаксис:

CALL :метка аргументы

При вызове создается новый контекст текущего пакетного файла
с заданными аргументами, и управление передается на инструкцию,
расположенную сразу после метки.
Ну да, чуть дольше (интересно, на сколько микросекунд?). При разовом вызове и не заметишь.
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.01.2013, 17:15
Ок, проверим.

Тестирование на 10.000 файлов.

Методика 1
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
@echo off
Setlocal EnableDelayedExpansion
 
Echo Direct Cycle Test
Set STime=%time%
for /L %%C in (1,1,10000) do (
  for %%A in ("l:\bash\copytest\..\EchoInto\tst.cmd") do set name=%%~fA
)
Set ETime=%time%
Call :TimeElapsed "%STime%" "%ETime%" ret
Echo Прошло: %ret% с.
Echo.
 
pause
Echo Cycle by Call Test
Set STime=%time%
 
for /L %%C in (1,1,10000) do Call :filesize fn "l:\bash\copytest\..\EchoInto\tst.cmd"
 
Set ETime=%time%
Call :TimeElapsed "%STime%" "%ETime%" ret
Echo Прошло: %ret% с.
 
pause
goto :eof
 
:filesize
set %1=%~z2
goto :eof
 
:TimeElapsed %1-StartTime %2-EndTime %3-var_result
Call :TimeToMSec "%~1" TimeS_ms
Call :TimeToMSec "%~2" TimeE_ms
Set /A diff=TimeE_ms-TimeS_ms
Set /A diffSS=diff/100
Set /A diffms=%diff% %% 100
Set %3=%diffSS%,%diffms%
Exit /B
 
:TimeToMSec %1-Time 2-var_mSec
For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
  Set /A HH=%%A
  Set MM=1%%B& Set /A MM=!MM!-100
  Set SS=1%%C& Set /A SS=!SS!-100
  Set mS=1%%D& Set /A mS=!mS!-100
)
Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B


Методика 2
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@echo off
Setlocal EnableDelayedExpansion
 
::Fill by empty files (count=10000)
Call FillPotok.bat "c:\test"
pause
 
Echo Direct Cycle Test
Set STime=%time%
 
for %%A in ("c:\users\..\test\*.*") do set name=%%~fA
 
Set ETime=%time%
Call :TimeElapsed "%STime%" "%ETime%" ret
Echo Прошло: %ret% с.
Echo.
 
pause
Echo Cycle by Call Test
Set STime=%time%
 
for /f "delims=" %%A in ('dir C:\test\*.* /b') do Call :filesize fn "c:\users\..\test\%%A"
 
Set ETime=%time%
Call :TimeElapsed "%STime%" "%ETime%" ret
Echo Прошло: %ret% с.
 
pause
goto :eof
 
:filesize
set %1=%~z2
goto :eof
 
:TimeElapsed %1-StartTime %2-EndTime %3-var_result
Call :TimeToMSec "%~1" TimeS_ms
Call :TimeToMSec "%~2" TimeE_ms
Set /A diff=TimeE_ms-TimeS_ms
Set /A diffSS=diff/100
Set /A diffms=%diff% %% 100
Set %3=%diffSS%,%diffms%
Exit /B
 
:TimeToMSec %1-Time 2-var_mSec
For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
  Set /A HH=%%A
  Set MM=1%%B& Set /A MM=!MM!-100
  Set SS=1%%C& Set /A SS=!SS!-100
  Set mS=1%%D& Set /A mS=!mS!-100
)
Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B


Способ с меткой ~10 раз дольше.
2-я методика - еще чуть дольше, но если учесть, что общее кол-во файлов = 10000,
то уже для обработки 100 ф. это займет действительно немного времени: 10 с./10000*100=0,1 c.
Вам выбирать.
Миниатюры
Получить полный путь к папке, заданной двумя точками   Получить полный путь к папке, заданной двумя точками  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2013, 17:15
Помогаю со студенческими работами здесь

Кратчайший путь между двумя точками на поверхности
Дано уравнение поверхности z=f(x,y) и две точки на поверхности. Требуется изобразить на одном графике саму поверхность и кратчайший путь от...

Найти полный путь к папке, имея только короткое имя
Как найти полный путь к папке имея только короткое имя?

Узнать полный путь к папке, в которой находится текущий cpp файл
Собственно, как в 6-м билдере вывести корректный путь до папки, в котором находится текущий исходник. Дело в том, что макрос __FILE__ в...

Найти полный путь, проходимый точкой между двумя последовательными моментами её касания поверхности
Точка А находится на ободе колеса радиусом 12 см, которое катится без скольжения по горизонтальной поверхности со скоростью 3 м/с. Найти...

Получить полный путь к программе
Привет, использую такой код #define MAX_PATH 260; char * name = new char; char buf; HMODULE hModule = GetModuleHandle(NULL); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru