5

Я хочу получить имя файла и назначить его переменной, чтобы потом использовать его в скрипте.

set directoryName = dir Docum?nt*
echo %directoryName%

Но как только я запускаю командный файл, все, что я получаю, это.

D:\ >a.bat
D:\ >set directoryName = dir Docum?nt*
D:\ >echo
ECHO is on.

Как я могу убедиться, что моей переменной присвоено значение, то есть имя каталога, чтобы я мог начать писать дальнейший сценарий.

мой a.bat содержит:

set directoryName=dir Docum?nt*
echo %directoryName%

После удаления пробелов:

D:\Workspace>set directoryName=dir Docum?nt*

D:\Workspace>echo dir Docum?nt*
dir Docum?nt*

Я предполагаю, что vairbale было назначено целое значение вместе с ключевым словом команды вместо результатов. Я ожидаю, что вывод будет именем каталога, т.е. Documentation

4 ответа4

4

Если вы хотите установить имя каталога, соответствующее Docum?nt* , то что вам нужно это:

for /d %%d in (Docum?nt*) do set directoryName="%%d"

Если маске соответствует несколько каталогов, вы получите только одно совпадение. Если вам нужна переменная для хранения списка совпадающих каталогов, вам нужно будет использовать for /f .

3

Пробелов нет

Если вам нужно использовать пробел в именах, поместите их в этот формат:

set directoryName = "dir Docum?nt*"

Это либо "", либо нет пробелов.

3

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

@ECHO ON

set directoryName=dir Docum?nt*
echo %directoryName%

Неправильно

  • set directoryName = dir Docum?nt*

Правильный

  • set directoryName=dir Docum?nt*

Неявный для цикла

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "Docum?nt*"') DO SET directoryName=%%~F

Рекурсивный цикл FOR

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD /S "Docum?nt*"') DO SET directoryName=%%~F

Дополнительные ресурсы

2

Я ожидаю, что вывод будет именем каталога, т.е. Documentation

Вы не получите Documentation в качестве вывода, если не выполните команду, которую вы сохранили в переменной.

Используйте следующий пакетный файл (test.cmd):

@echo off
setlocal
set directoryName=dir Docum?nt*
rem run command
cmd /c %directoryName%
pause 
endlocal

Пример вывода:

> test
dir Docum?nt*
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

09/03/2017  17:10    <DIR>          Documentation
               0 File(s)              0 bytes
               1 Dir(s)  1,701,065,842,688 bytes free

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - отличный справочник для всех
  • cmd - Запустить новую оболочку CMD и (необязательно) запустить команду / исполняемую программу.
  • dir - Показать список файлов и подпапок.
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .