- 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
)
我的循环中的关键问题
- 每个循环仅使用
%%f
一次变量并将其分配给indir
。此后使用该!indir!
变量。 - 我删除了使用,
%tempoutfile%
因为如果文件存在,该fromxsf
命令允许我从其自身附加输出(使用 -a),在这种情况下它确实存在。