2016-07-20 3 views
0

Я немного застрял здесь. Запуск пакетного файла, который имеет пару шагов. Мне нужно запустить пакетный файл в папке, проходящей через каждую папку, и 3 папки вниз назначить эту переменную. Так что скопировать третью папку вниз в каждой папке Так моя папка структураПередача переменной в подпапку

e.g1: 2135698563325 \ Folder1 \ folder2 \ folder3 \ C007

ЭГ2: 21356486543248 \ Folder1 \ folder2 \ folder3 \ C111

REM get c007 as a variable to be able to set a folder name 
set variable = Folder0\Folder1\Folder2\Folder3\%Variable% 

REM Step 2:Check that the c007 folder doens't already exist 
if %Variable%==\\hippo\Folder4\ ((echo "Error: Duplicate Folder"):eof) Else mkdir \\hippo\Folder4\%Variable% 

REM Step 3:Copy a default File Structure from Template Dir 
xCopy /s \\hippo\production\Folder4\Temaplate \\hippo\production\Folder4\%Variable% 
Rem Step 4: Copy the contents of c007 in to Folder6 
xCopy /s %Variable% \\hippo\production\Folder4\Variable\Folder5\Folder6\ 

Это имеет смысл?

+3

должен быть '% переменная%' вместо 'variable' во всем коде. –

+0

Итак, я могу изменить это, но все еще не уверен, как пройти через каждую папку и понять, что 3-я папка с переменной? –

+1

Можете ли вы отредактировать свой пост с примером того, что вы получаете и что вам понадобится? Я немного потерялся здесь. например, вторая строка вашего скрипта не может работать так, как есть. –

ответ

0

Вот комментарий к пакетному сценарию о том, как получить c007 и c111. Поместите свой код в подпрограмму ProcessFolder. Имена папок c007 и c111 передаются подпрограмме через первый аргумент, на который ссылаются %~1.

@echo off 
setlocal EnableExtensions 

rem Get current directory path always without backslash at end. Environment 
rem variable CD holds the current directory path usually without backslash 
rem at end. But current directory string is with backslash at end if the 
rem current directory is the root directory of a drive. 
if "%CD:~-1%" == "\" (
    set "CurrentFolder=%CD:~0,-1%" 
) else (
    set "CurrentFolder=%CD%" 
) 

rem Process the folder names 4 levels below current directory. 
for /D %%A in ("%CurrentFolder%\*") do (
    for /D %%B in ("%%A\*") do (
     for /D %%C in ("%%B\*") do (
      for /D %%D in ("%%C\*") do (
       for /D %%E in ("%%D\*") do (
        call :ProcessFolder "%%~nxE" 
       ) 
      ) 
     ) 
    ) 
) 

endlocal 
rem Avoid a fall through to the subroutine by exiting batch processing here. 
goto :EOF 

rem Subroutine to process the folder with name found above. 

:ProcessFolder 
echo Folder variable is: %~1 

rem Exit subroutine and continue in the most inner FOR loop above. 
goto :EOF 

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

  • call /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rem /?
  • set /?
  • setlocal /?
Смежные вопросы