如何使用窗口批处理脚本读取多个文本文件?

时间:2016-02-03 08:46:49

标签: batch-file

目前我正在尝试从我的直接文件夹中可用的不同文本文件中读取变量值,并使用这些变量执行将内容上载到FTP服务器等命令。

我有不同的FTP服务器,我需要上传同一组文件。所以我想要的是读取保存在不同文本文件中的不同FTP服务器的主机名,用户ID和密码,并使用这些值为所有人执行相同的命令集。

这是我的FileUpload.bat看起来像: -

@echo off
setlocal EnableDelayedExpansion
for %%x in (C:\Users\xxxx\Desktop\Anivirus_Upload\text_*.txt)
    do ( 
    for /f "usebackq delims=" %%A in ("%%~Fx") 
        do (
            if "%%A"="user" set user=%%B
                if "%%A"="password" set password=%%B
                if "%%A"="localPath" set localPath=%%B
                if "%%A"="serverpath" set serverpath=%%B
                if "%%A"="Hostname" set Hostname=%%B    
                echo  user %user%> ftpcmd.dat
                echo %password%>> ftpcmd.dat
                echo lcd %localPath%>>ftpcmd.dat
                echo cd %serverpath%/>>ftpcmd.dat
                echo put %1>> ftpcmd.dat
                echo quit>> ftpcmd.dat
                ftp -n -s:ftpcmd.dat %Hostname%
                del ftpcmd.dat
            ) 
    )

在文件夹中我有不同的文本文件,即

text_1 
text_2

等,每个文本文件的值如下: -

user=XXXX
Hostname=10.164.XXXXX
password=XXXXX
localPath=C:\Users\XXXX\Desktop\Service_Pack_74
serverpath=Temp/XXXX/Service_Pack_74/

我不知道在阅读多个文本文件时我在哪里弄乱代码。

我使用单个文本文件检查了我的批处理文件,并且我能够正确上传内容,所以看起来问题是外部for循环从目录中读取多个文件。

1 个答案:

答案 0 :(得分:1)

这里有很多不妥之处。

首先,do ( 必须for位于同一物理行。

接下来,第二个delims循环的for子句应为delims=="。仅关闭1 = 分隔符,因此将为%%A分配整行的内容,%%B将被解释为文字字符串%B AND 要为元变量赋值,您需要添加一个tokens子句,指定要分配的标记。

接下来,在一个块(带括号的一系列命令)中,任何%var%在输入块时被变量var的内容替换,而不是它采用的任何新值。块被执行。

接下来,将为文件的每一行执行整个输出和ftp部分。任何输出都取决于最初分配给您正在使用的变量的值 - 可能来自之前的运行。

@echo off
setlocal EnableDelayedExpansion
for %%x in (C:\Users\xxxx\Desktop\Anivirus_Upload\text_*.txt) do ( 
 for /f "usebackq tokens=1* delims==" %%A in ("%%~Fx") do (
  if "%%A"=="user" set user=%%B
  if "%%A"=="password" set password=%%B
  if "%%A"=="localPath" set localPath=%%B
  if "%%A"=="Hostname" set Hostname=%%B    
  if "%%A"=="serverpath" (
   set serverpath=%%B
   echo user !user!> ftpcmd.dat
   echo !password!>> ftpcmd.dat
   echo lcd !localPath!>>ftpcmd.dat
   echo cd !serverpath!/>>ftpcmd.dat
   echo put %1>> ftpcmd.dat
   echo quit>> ftpcmd.dat
   ftp -n -s:ftpcmd.dat !Hostname!
   del ftpcmd.dat
  ) 
 )
)

请注意,ftp命令文件是使用!var!构建和执行的,delayedexpansionput生效时访问变量的变量值。

我不知道你在ftp - %1命令中想要什么。实际上,例程会将第一个参数替换为serverpath

的批处理文件

我还假设每个变量都保证出现在每个文件中,并且$array = json_decode($result,true); 将在该文件中排在最后。