如何循环遍历文本文件中命名的文件? Windows Server 2012

如何循环遍历文本文件中命名的文件? Windows Server 2012
  • Windows Server 2012 cmd.exe 框
  • 我需要创建一个名为 的批处理文件get.bat,以处理 中列出的dlist.txt与 位于同一目录中的所有目录get.bat。 dlist.txt 中的目录名称每行一个。 dlist.txt 是使用 创建的dir /b DIV_* > dlist.txt。 这些 DIV_ 文件实际上是运行我的批处理文件的目录的子目录。
  • 我无法在 FOR 命令中使用文件规范,因为我需要dlist.txt在创建后手动编辑。我不想处理所有目录DIV_*,只想处理其中的一些。
  • 创建dlist.txt意味着dir /w DIV_* > dlist.txt所有目录名称周围都有 [] 并且我无法使用它。
  • 有一个参数get.bat是包含fromxsf命令的所有结果的基本文件名。批处理文件将添加 .txt 扩展名。
  • 我需要对中的每个目录执行多个命令dlist.txt,其中一些命令设置一个名为 %tempoutfile% 的临时文件名,然后在中使用fromxsf
  • 我读过我在 Google 上找到的几页,包括 Superuser 的一些内容,但可能适用于 cmd.exe 的示例对我来说不起作用。也许 Windows 2012 Server 太旧了?我无法改变这一点,我必须使用我已有的东西。
  • fromxsf处理每个目录dlist.txt需要将目录作为后面的一个参数-cd,并将临时输出文件作为另一个参数,即 %tempoutfile%。
  • 我们似乎没有 powershell 或者至少没有设置它的路径。

以下是我使用 FOR 循环尝试的结果:

set destdir=c:\tempdir
set outfile=%destdir%\%1.txt
FOR /F %%f in ('type dlist.txt') DO (
    echo "--------------------"

    echo Basedir=%%f should be directory
    set tempoutfile=../%%f.txt
    echo outfile=%destdir%\%outfile%
    echo tempoutfile=%tempoutfile%
    echo Processing dir %%f, to tempfile %tempfile%
    pause
    rem Below is the command to process the dir name in %%f to make a temp file in %tempoutfile%
    fromxsf %tempoutfile% -cd %%f +m -nbs -Rep -nofrills

    if exist "%destdir%" (
        echo " " >> %outfile%
        echo "{DIVNAME=%i}" >> %outfile%
        rem Append %tempoutfile% to %outfile%.
        type %tempoutfile% >> %outfile%
        del %tempoutfile%
    )
)

对于上述情况,%%f 的值始终是 dlist.txt 的第一行。这不是我想要的。

我在循环中执行的操作是将目录的处理内容输出到 %tempfile% 中的临时文件中,然后将 %tempfile% 的内容连接到 %destdir%\%outfile%。这mycommand需要输入目录 %%f 作为命令行参数。我只是无法重定向 STDOUT 并将输出附加到 %destdir%\%outfile%。

我尝试过一些替代的 FOR 循环:

  • FOR %%f in (dlist.txt) DO (。对于这种情况,%%f始终是第二个目录名称,dlist.txt并且永远不会改变。

有人知道怎么做吗?

谢谢你!


编辑:谢谢。我使用延迟扩展和使用 Google 找到的另一篇文章找到了答案。循环的核心是这样的,文件名包含在文本文件中,dlist.txt每行一个文件名。我的问题是缺少"tokens=*"选项。此外,在循环中每次都必须使用 !variable! 符号。下面的循环还有 echo 语句来显示变量的值。

setlocal EnableDelayedExpansion
set outfile=c:\temp\tempout.txt
del %outfile%
FOR /f "tokens=*" %%f in (dlist.txt) DO (
    echo.
    echo --------------------
    set indir=%%f
    echo Basediv indir=!indir!
    echo Processing division !indir!

    echo. >> %outfile%
    echo {DIVNAME=!indir!} >> %outfile%
    pause
    fromxsf %outfile% -cd !indir! +m -nbs -Rep -nofrills -a
)

我的循环中的关键问题

  1. 每个循环仅使用%%f一次变量并将其分配给indir。此后使用该!indir!变量。
  2. 我删除了使用,%tempoutfile%因为如果文件存在,该fromxsf命令允许我从其自身附加输出(使用 -a),在这种情况下它确实存在。

相关内容