Пакетные файлы: Получите полный путь

Чтобы решить проблему, используйте эту команду для создания проекта (он сгенерирует папку libs и файл jar):

./gradlew -p web -x test -x jar build

Версия Gradle: 4.7. (Gradle 5.3 не работает)

5
задан Jon Seigel 7 March 2010 в 18:25
поделиться

4 ответа

После выполнения некоторого тестирования это появляется это "%%~pi" снабдит префиксом текущий каталог к каждому элементу, который не запускается с "\". Я заключаю, что это принимает дело обстоит так, так как это было бы файлом, который Вы откроете, если бы Вы просто использовали "файл" - так же "x\y", то был бы файл "\x\y".

Например, следующий сценарий:

@echo off
for /f %%i in (test.txt) DO (
    echo %%~pi
)

при выполнении на следующем файле:

\directory1\directory2\directory3\file1
\directory1\file2
\directory1\directory2\directory3\directory4\file3
\directory1\file4
\directory1\directory2\file5
file6
x\y
\z

произведет (я нахожусь в \Documents и каталоге Settings\Administrator):

\directory1\directory2\directory3\
\directory1\
\directory1\directory2\directory3\directory4\
\directory1\
\directory1\directory2\
\Documents and Settings\Administrator\
\Documents and Settings\Administrator\x\
\

Таким образом, ответ прост. Обнаружьте сначала те строки, которые не начинаются "\" и рассматривайте их особенно. Следующий сценарий:

@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%i in (test.txt) DO (
    set ch0=%%i
    set ch0=!ch0:~0,1!
    if not "!ch0!"=="\" (
        echo.
    ) else (
        echo.%%~pi
    )
)
endlocal

генерирует Ваш желаемый вывод, следующим образом:

\directory1\directory2\directory3\
\directory1\
\directory1\directory2\directory3\directory4\
\directory1\
\directory1\directory2\


\

setlocal/endlocal - что-то, что я вставил большинство своих сценариев в наше время, так как он препятствует тому, чтобы переменные среды пропустили один уровень, и задержанное расширение является блестящим (использование "!" вместо "%").

Я использую ch0 временную переменную для получения первого символа файла ("!ch0:~0,1!" оператор подстроки, "получите один символ при смещении 0 из ch0 переменной", и можно использовать "%" версия также, если Вы не делаете задержанного расширения).

Затем я сравниваю его с "\". Если это - наклонная черта, я отзываюсь эхом "%%~pi", иначе я просто произвел пустую строку согласно Вашей спецификации.

3
ответ дан 14 December 2019 в 19:26
поделиться

Кажется, что это происходит из-за недостающей обратной косой черты перед file6.
Разве не возможно изменять Ваши исходные данные, чтобы всегда иметь ведущую обратную косую черту?

Ваш вход затем стал бы

\directory1\directory2\directory3\file1 
\directory1\file2 
\directory1\directory2\directory3\directory4\file3 
\directory1\file4 
\directory1\directory2\file5 
\file6
0
ответ дан 14 December 2019 в 19:26
поделиться

Можно сохранить каталог, который Вы хотите проигнорировать в переменной:

FOR %%i in (file) do set ignoredir=%%~pi
FOR /F %%i in (test.txt) DO (
  if not %%~pi == %ignoredir% echo %%~pi
)
set ignoredir=

Это работает как ожидалось. Вывод:

\direcotry1\directory2\directory3\
\direcotry1\
\direcotry1\directory2\directory3\directory4\
\direcotry1\
\direcotry1\directory2\
2
ответ дан 14 December 2019 в 19:26
поделиться

Update2:

Как отмеченный Lieven, если можно осуществить это, все запускается с "\" в файле test.txt, затем можно использовать этот код:

@echo off
FOR /F %%i in (test.txt) DO (
  if not "%%~pi" == "\" echo %%~pi
)

Обновление:

На самом деле, после чтения Вашего вопроса снова, я заметил, что то, в чем Вы нуждаетесь, является оператором EXIST..

ДЛЯ/F %% я в (test.txt) ДЕЛАЮ (если существуют %%, я отзываюсь эхом %% ~pi command1 command2),

Это то, в чем Вы нуждаетесь?

Мое исходное сообщение...

При вызове пакетного файла просто сделайте:

yourbatchfile.bat >nul 2>nul

Что-либо идущее в stdout и stderr (Ваше отображение на экране) будет передано по каналу к не, где, и не появляются. Обратите внимание, что абсолютно ничто не будет произведено от того пакетного файла...

0
ответ дан 14 December 2019 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: