在目录中按文件名设置值

时间:2015-09-22 06:49:22

标签: windows batch-file cmd

您好我想为目录中的所有文本文件设置值InFile,这意味着我希望加载批处理文件并逐个执行目录中所有文本文件的命令。

通常我只是复制命令文件的次数,然后我用每个文件名替换Infile。通过这段代码,我得到文件名,然后我替换它们。

cd /d "dir"
dir /a /b /-p /o:gen >names.txt

这是一个命令的例子。

@Echo OFF
REM Set These Variables
SET "InFile=123.txt"
SET "OutFile=NowLoad.txt"
SET "Replace=KK"
SET "ReplaceWith=JJ"

REM Get Total Lines Number [including empty lines]
FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""') DO SET "Till=%%A"

REM Create The OutFile with changes
SETLOCAL EnableDelayedExpansion
<"!InFile!" (
  FOR /L %%a IN (1 1 0) DO SET /p "="
  FOR /L %%A IN (1 1 %Till%) DO (
    SET "line="
    SET /P "line="
    IF "!line!x" == "x" ( Echo.
   ) ELSE ( Echo !line:%Replace%=%ReplaceWith%!)
  )
)>>"%OutFile%"

ENDLOCAL

2 个答案:

答案 0 :(得分:1)

无需计算行数,只需处理每一行:

setlocal enabledelayedexpansion
for %%f in (*.txt) do (
  ( for /f "delims=" %%A in (%%f) do (
      set line=%%A
      set line=!line:%Replace%=%ReplaceWith%!
      echo(!line!
    )
  )>%%~nf.out
)

注意:(之后的echo处理空行(空行写为不#34;回声关闭&#34;如果!line!为空)

已编辑以处理文件夹中的所有.txt文件。因为固定的%oufile%会覆盖每个已处理的infile的相同outfile,所以我将其更改为新的Extension:<SameNameAsInputFile>.out

答案 1 :(得分:0)

另一种方式......

您的脚本是DOIT.bat。

更改DOIT.bat以使用命令行参数作为您要处理的文件名。

@Echo OFF
REM Set These Variables
SET "InFile=%~1"
SET "OutFile=NowLoad.txt"
...

创建另一个名为CALLIT.bat的文件

@ECHO OFF
FOR /F "usebackq tokens=*" %%f IN (`dir /b *.txt`) DO (
    CALL DOIT.bat "%%~f"
)

运行CALLIT.bat将处理目录中的每个.txt文件。