Зацикливать строку папки и анализировать имя последней папки - PullRequest
15 голосов
/ 11 ноября 2008

Мне нужно получить имя папки исполняемого в данный момент пакетного файла. Я пытался перебрать текущий каталог, используя следующий синтаксис (который в настоящее время неверен):

set mydir = %~p0
for /F "delims=\" %i IN (%mydir%) DO @echo %i

Пара проблем в том, что я не могу передать значение переменной 'mydir' в качестве строки поиска. Кажется, это работает, только если я передаю команды; У меня неправильный синтаксис, и я не могу понять, почему.

Я думал о том, чтобы перебрать строку папки с разделителем '\', но это тоже вызывает проблемы. Если я устанавливаю переменную в каждом цикле, то последним установленным значением будет имя текущей папки. Например, указан следующий путь:

C: \ Folder1 \ Folder2 \ folder3 \ Archive.bat

Я ожидал бы разобрать значение 'Folder3'.

Мне нужно разобрать это значение, так как его имя будет частью другой папки, которую я собираюсь создать ниже в командном файле.

Большое спасибо, если кто-нибудь может помочь. Возможно, я полностью лаю не на то дерево, так что любые другие подходы также будут приняты.

Ответы [ 12 ]

0 голосов
/ 11 ноября 2008

Это то, что у нас было в итоге (немного грубее и может пойти только так глубоко:)

@echo off
for /f "tokens=1-10 delims=\" %%A in ('echo %~p0') do (
    if NOT .%%A==. set new=%%A
    if NOT .%%B==. set new=%%B
    if NOT .%%C==. set new=%%C
    if NOT .%%D==. set new=%%D
    if NOT .%%E==. set new=%%E
    if NOT .%%F==. set new=%%F
    if NOT .%%G==. set new=%%G
    if NOT .%%H==. set new=%%H
    if NOT .%%I==. set new=%%I
    if NOT .%%J==. set new=%%J
)

@echo %new%
0 голосов
/ 11 ноября 2008

В пакетных файлах в команде FOR вам нужно добавить% к дополнительному% (например, %% независимо).

'echo% ~ p0' напечатает текущий каталог командного файла.

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