Я пытаюсь создать меню, которое позволяет пользователю развернуть папку для пакетного копирования и синхронизации c файлов. Однако мне сложно получить доступ к значениям массива по индексам, которые вводит пользователь. В for l oop они отображаются нормально, и похоже, что они правильно записаны в массиве.
Но когда я пытаюсь установить их или вывести их позже, я не получаю правильный вывод.
Не уверен, что я здесь не так делаю.
:DirectoryContents
setlocal EnableDelayedExpansion
if exist "\\test\proj\dpa3\EXTERIOR\VCSE DVA Sync\%programNameAndYear%" (
echo The sub-folders in this folder on the share drive are:
echo.
Pushd "\\test\proj\dpa3\EXTERIOR\VCSE DVA Sync\%programNameAndYear%"
REM dir /b /ad
set /a ID=0
for /d %%a in (*) do (
set folderName[%ID%]=%%a
echo (!ID!^) %%folderName[%ID%]%%
set /a ID=ID+1
)
echo.
echo Please, select an assembly
SET /P "selection=Input>"
SET assemblyName=!folderName[%selection%]!
echo assemblyName !assemblyName!
call echo Folder0 !folderName[%0%]!
call echo Folder1 !folderName[%1%]!
call echo Folder2 !folderName[%2%]!
echo test !folderName[%selection%]!
call echo test2 %%folderName[%selection%]%%
pause
echo This folder does not exist on the shared drive
)
endlocal
REM pause
popd
exit /b
структура папок
cmd
Хорошо, поэтому, основываясь на отзывах, я сделал несколько обновлений в коде. Теперь я уверен, что имена папок правильно хранятся в индексе массива. Я легко могу увидеть это, жестко закодировав индекс.
Итак, echo Folder0 !folderName[0]!
возвращает имя первой папки и т. Д. c.
Однако после изменения
set folderName[%ID%]=%%a
echo (!ID!^) %%folderName[%ID%]%%
to
set folderName[!ID!]=%%a
echo (!ID!^) %folderName[!ID!]%
Я получаю пробел после номера индекса. Ex. (1)
Также не устанавливается переменная assemblyName.
Я пытался
SET assemblyName=!folderName[%selection%]!
call echo assemblyName !assemblyName!
and
SET assemblyName=%folderName[!selection!]%
call echo assemblyName !assemblyName!
оба вернуть пробелы.
В конечном итоге, кто я попытаться сделать это использовать переменную assemblyName в сетевом пути для доступа к папке.
Pushd "\\test\proj\dpa3\EXTERIOR\VCSE DVA Sync\%programNameAndYear%\!assemblyName!\"