2016-02-16 4 views
1

В приведенном ниже скрипте предлагается указать путь к папке. Затем скрипт должен прокручиваться через папку для создания файлов.Петля через заданный путь к папке инкрементно

Например, введите путь C: \ aa. Скрипт должен зацикливаться на C: \ aa \ fol1 до C: \ aa \ fol5 для создания файлов.

Например, текущая папка C: \ aa пуста.

Input C:\aa. 

Expected output would be 



C:\ -- aa -- fol1\aa1\bb1\cc1\dd1\00-1 with each subfolder has 20 files. 
       -- fol2\aa2\bb2\cc2\dd2\00-2 with each subfolder has 20 files. 
       -- fol3\aa3\bb3\cc3\dd3\00-3 with each subfolder has 20 files. 
       -- fol4\aa4\bb4\cc4\dd4\00-4 with each subfolder has 20 files. 
       -- fol5\aa5\bb5\cc5\dd5\00-5 with each subfolder has 20 files. 

@echo off 
setlocal enableDelayedExpansion 
set /p folder="Enter path: (C:\aa) : " 
set /p action="Choose an action (Modify for M , Add for A , Delete for D , Rename for R , F for create Folder and files): " 

pause 

2>NUL CALL :CASE_%action% # jump to :CASE_M, :CASE_A, etc. 
IF ERRORLEVEL 1 CALL :DEFAULT_CASE # if label doesn't exist 

ECHO Done. 
EXIT /B 

:CASE_F 
    FOR /L %%A IN (1,1,5) DO (


    mkdir "%folder%"\fol"%%A"\aa"%%A"\bb"%%A"\cc"%%A"\dd"%%A"\00-"%%A" 
) 

    timeout 11 > NUL 

    FOR /L %%A IN (1,1,5) DO (


    mkdir "%folder%"\fol"%%A"\uu"%%A"\bb"%%A"\cc"%%A"\dd"%%A"\00-"%%A" 
) 
    timeout 11 > NUL 
    echo end of create folder 
    pause 

    FOR /L %%A IN (1,1,5) DO (
     echo %folder%\fol%%A 
     set pfolderpath=%folder%\fol%%A 
     pause 

     for /D /r "%pfolderpath%" %%F in (*) do (
     echo LALA 
     FOR /L %%B IN (1,1,20) DO (
     @echo this is new line > "%%F"\bear"%%B".txt 
     ) 
    ) 
) 
    GOTO END_CASE 

:END_CASE 
    VER > NUL # reset ERRORLEVEL 
    GOTO :EOF # return from CALL 

Сценарий выше успешно создавать вложенные папки fol1 \ aa1 \ BB1 \ cc1 \ DD1 \ 00-1 для fol5. Просто, чтобы не создавать петли в fol1 to fol5 для создания файлов. Сценарий работает хорошо, если я жестко кодирует pfolderpath с абсолютным путем C: \ aa \ fol1. Я предполагаю, что что-то не так с циклом for, но невежественным. Пожалуйста посоветуй.

+0

на самом деле мой скрипт успешно создает подпапки, только что он просто не войдет в FOR/L %% A IN (1,1,5) DO ( echo% folder% \ fol %% A set pfolderpath = % папка% \ fol %% A pause для/D/r "% pfolderpath%" %% F in (*) do ( echo LALA FOR/L %% B IN (1,1,20) DO ( @echo это новая строка> "%% F" \ bear "%% B" .txt )) ) для создания файлов в подпапках. – sel

ответ

0

Изменить следующий участок кода, чтобы иметь две сокровенные петли запуска и файлы, созданные в недавно созданных папках:

for /D /r "%pfolderpath%" %%F in (*) do (
    echo LALA 
    FOR /L %%B IN (1,1,20) DO (
    @echo this is new line > "%%F"\bear"%%B".txt 
    ) 
) 

к:

PUSHD !pfolderpath! 
    for /r %%F in (.) do (
    echo LALA 
    FOR /L %%B IN (1,1,20) DO (
    @echo this is new line > "%%F"\bear"%%B".txt 
    ) 
) 
    POPD 

Обратите внимание, что существует 5 изменений:

  1. Использование! Pfolderpath! вместо% pfolderpath%, вместе с отложенным расширением это будет делать то, что вы хотите
  2. Удалить двойные кавычки
  3. Удалите/D
  4. Введите каталог перед для/г. Я использую PUSHD в паре с POPD здесь, чтобы гарантировать, что после выполнения сценарий не изменил путь. Обратите внимание, что должно быть возможно указать путь! Pfolder! root прямо в команде for/r.
  5. Используйте . как набор, чтобы перечислять только папки. Вы бы использовали *, если хотите перечислить файлы, но их пока нет.

Также обратите внимание, что для тех, кто тестирует этот скрипт, вы должны ответить F на запрос «Выбрать действие»; другие здесь не реализованы.

+0

Я пробовал с кодом. Код сделал цикл в for-loop. Однако, кажется, не удалось создать файлы. У вас есть идеи по этому поводу? – sel

+0

Сценарий создает файлы в том месте, где выполняется сценарий. Он не создавал файлы в определенном месте. – sel

+0

Только что сделал редактирование, чтобы устранить проблему с расположением файла. – WinTakeAll