【问题标题】:Loop thru a given folder path incrementally逐步循环通过给定的文件夹路径
【发布时间】:2016-02-16 04:01:01
【问题描述】:

下面的脚本提示输入文件夹路径。然后脚本将遍历文件夹以创建文件。

例如,输入路径 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 到 fol5 来创建文件。如果我使用绝对路径 C:\aa\fol1 对 pfolderpath 进行硬编码,则该脚本运行良好。我猜它的 for 循环有问题,但一无所知。请指教。

【问题讨论】:

  • 实际上我的脚本成功创建了子文件夹,只是它不会进入 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 ) ) ) 在子文件夹中创建文件。

标签: windows loops batch-file for-loop


【解决方案1】:

更改以下代码部分以运行两个最里面的循环并在新创建的文件夹中创建文件:

  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. 输入 for /r 之前的目录。我在这里使用 PUSHD 与 POPD 配对,以确保执行后脚本没有更改路径。请注意,应该可以指定!pfolderpath! for /r 命令中的根目录也是如此。
  5. 使用. 作为集来仅枚举文件夹。如果您想枚举文件,可以使用 *,但目前还没有。

还请注意,对于测试此脚本的任何人,您必须响应 F 提示“选择一个操作”;其他的在这里没有实现。

【讨论】:

  • 我已尝试使用该代码。代码确实循环到了 for 循环中。但是,似乎无法创建文件。你对此有什么想法吗?
  • 脚本在执行脚本的位置创建文件。它没有在预期位置创建文件。
  • 刚刚进行了编辑以解决文件位置问题。
猜你喜欢
  • 2016-03-02
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 2016-07-03
  • 1970-01-01
相关资源
最近更新 更多