BATCH / CMD:将.text的每一行打印到变量中

时间:2012-07-03 00:46:01

标签: command-line batch-file for-loop regsvr32 findstr

目标:让计算机中的每个dll文件都传入regsvr32.exe

完成: CD \
:: REM将每个文件和目录(/ s)导出到c的根目录中的文件:名为dir.txt,只有文件名(/ b)
dir / s /b>>dir.txt
:: REM现在,这将包含每种扩展类型。我们只想要dll,所以我们将它发现到dll.txt:
findstr“.dll $”dir.txt>> dll.txt

The Kink:

现在,如果我想regsvr32.exe“文件”现在在dll.txt中的每个文件,我不知何故需要得出每行单独的每个文件名。我想知道是否有第三方命令行工具可以将文件的每一行导出到变量中。这样,我可以:

==========

:: REM假设此工具的行号为switch / l,而/ v:“”表示要使用的变量,最后使用“file”:

set line=1  
:loop  
set dll=  
tool.exe /l %line% /v:"dll" "dll.txt"  
::REM We if defined here because if the line doesn't exist in dll.txt, the tool would return nothing to %dll%
if not defined %dll% exit  
::REM With the variable defined, we can continue  
regsvr32.exe %dll%  
set /a line=%line%+1  
goto loop  

=======================

然后该工具将处理文件每一行的每个路径,直到它自动退出,因为不再有行。注意,在循环之后我将dll设置为空,这样每次都可以使用'if not defined'。

如果这种类型的第三方工具无法完成,有没有办法做到这一点? 老实说,我从来没有学过,并试图但却无法理解。

非常感谢任何帮助!

对不起,如果已经回答了这个问题。

修改/更新: 我发现我将如何完成这项工作。

感谢:http://pyrocam.com/re-register-all-dlls-to-fix-no-such-interface-supported-error-in-windows-7-after-installing-ie7-standalone/
并且:Read a txt line by line in a batch file

第一个链接显示用regsvr32.exe手动替换开头 第二部分展示了在这种情况下如何使用{还要感谢craig65535对他的帮助:)}

代码:

@echo off
color 1f
title Register .dll
echo.
echo Exporting file list . . .
echo.
cd /d c:
cd\
if exist dll.txt del dll.txt
if exist dir.txt del dir.txt
if exist dll.bat del dll.bat
echo Part 1 of 3 . . .
echo.
dir /s /b>>dir.txt
echo Part 2 of 3 . . .
echo.
findstr ".dll$" dir.txt>>dll.txt
del dir.txt
echo Part 3 of 3 . . .
echo.
for /f "delims=" %%i IN ('type dll.txt') do echo regsvr32.exe /s "%%i">>dll.bat
del dll.txt
echo Ready to begin regsvr32.exe . . .
echo.
pause
echo.
echo Beginning registration . . .
echo *This will take time, close any popups that occur
echo.
call dll.bat
echo.
echo Deleting registration file . . .
if exist dll.bat del dll.bat
echo.
echo DONE.
echo.
pause >nul

1 个答案:

答案 0 :(得分:1)

您想要的命令是for /f

for /f %%f in ('type dll.txt') do regsvr32.exe %%f

type dll.txt的输出并一次将一行放入%%f。然后,您可以使用%%f作为其他命令的参数。

如果您想要执行regsvr32.exe %%f以上的操作,可以编写另一个批处理文件并调用:

for /f %%f in ('type dll.txt') do call process.bat %%f
然后,

process.bat会收到%1的文件名。