目前我正在尝试从我的直接文件夹中可用的不同文本文件中读取变量值,并使用这些变量执行将内容上载到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循环从目录中读取多个文件。
答案 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!
构建和执行的,delayedexpansion
在put
生效时访问变量的变量值。
我不知道你在ftp - %1
命令中想要什么。实际上,例程会将第一个参数替换为serverpath
我还假设每个变量都保证出现在每个文件中,并且$array = json_decode($result,true);
将在该文件中排在最后。