Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 未定义包含FOR循环批处理信息的变量_Loops_Batch File_Variables_For Loop - Fatal编程技术网

Loops 未定义包含FOR循环批处理信息的变量

Loops 未定义包含FOR循环批处理信息的变量,loops,batch-file,variables,for-loop,Loops,Batch File,Variables,For Loop,目标: 了解如何在批处理文件的FOR循环例程中使用空变量 问题: 我使用是否定义变量来确定脚本中的适当子例程;定义的2个变量==去做某事。一个已定义,但另一个未定义==执行其他操作。两者都未定义==再次定义其他内容 该脚本检查网络PC文本文件列表的C$访问和C$中是否存在某个文件。如果两个具有数据集的变量都满足这两个条件,那么一个简单的xcopy将通过转到某个子例程来更新所讨论的文件,然后循环移动到网络上的下一台PC,尝试执行相同的操作 如果有问题,我想在空状态下使用变量,然后做其他事情;例如,

目标: 了解如何在批处理文件的FOR循环例程中使用空变量

问题: 我使用是否定义变量来确定脚本中的适当子例程;定义的2个变量==去做某事。一个已定义,但另一个未定义==执行其他操作。两者都未定义==再次定义其他内容

该脚本检查网络PC文本文件列表的C$访问和C$中是否存在某个文件。如果两个具有数据集的变量都满足这两个条件,那么一个简单的xcopy将通过转到某个子例程来更新所讨论的文件,然后循环移动到网络上的下一台PC,尝试执行相同的操作

如果有问题,我想在空状态下使用变量,然后做其他事情;例如,向文本文件报告c$不可访问或文件丢失意味着安装错误等

然而,在我的2台测试机器上,我破坏了文件夹路径,使错误报告例程陷入困境,并发现一些奇怪的问题,如果不编写更多的代码行,我将无法修复。在我的文本文件中,我列出了2台电脑几次,例如

PC1 PC2 PC1 PC2 PC1 PC2

PC1有一个断开的文件路径来测试错误日志记录 PC2所有测试文件更新过程都很好

当我运行脚本时,会报告PC1有问题并正确记录。 PC2一切正常,更新也正常。但随后它再次命中PC1,但似乎认为(即使文件路径仍然断开)它是正常的——就好像这个变量是从上一个循环中记住的,当然,它试图更新并且出现了问题

下面是我试图使用空变量开始工作的代码

@echo off
color 0E
pushd %~dp0
setlocal EnableDelayedExpansion

for /f "usebackq tokens=*" %%i in ("%~dp0hostnames.txt") do (

rem Test Access Admin Shares C$
if exist "\\%%i\C$\Windows\System32" set dollar=yes

rem Test Installation Integrity
if exist "\\%%i\C$\ProgramData\config.cfg" set install=ok

echo %%i
echo !dollar!
echo !install!
pause

IF !dollar!==yes IF !install!==ok (call :updatecfg %%i)

IF !dollar!==yes IF [!install!]==[] (call :installerror %%i)

IF [!dollar!]==[] (call :errorshare %%i)
)
echo THE END
pause
exit

:updatecfg
CLS
XCOPY "%~dp0config.cfg" /Y "\\%1\C$\ProgramData" & echo %1 Update Config.cfg Succeeded! & echo %1 Update Succeeded! >>"%~dp0logpass.txt" 
ping 127.0.0.1 -n 3 >nul
goto :eof

:errorshare
CLS
echo.
echo    %1 Has C$ Access Issues [Logging] & echo %1 Has C$ Access Issues >>"%~dp0logfail.txt"
ping 127.0.0.1 -n 3 >nul
goto :eof

:installerror
CLS
echo.
echo    %1 Cannot Find Config.cfg^!^! [Logging] & echo %1 Cannot Find Config.cfg^!^! Not Installed or Configured^? >>"%~dp0logfail.txt"
ping 127.0.0.1 -n 4 >nul
goto :eof
如果我在开始时将If not exist entried添加到2,并在出现问题时让他们设置一些内容,那么这就可以了。但是我想知道这样做是否正确,或者我是否应该使用空变量。我快到了,只是他们没有正确地清除每个循环

非常感谢

。。。。
对于/f“usebackq delims=“%”中的%%i(“%~dp0hostnames.txt”)执行以下操作(
rem清除每个迭代的变量
设置“美元=”
设置“安装=”
rem测试访问管理共享C$
如果存在“\\%%i\C$\Windows\System32”设置“美元=是”
rem测试装置完整性
如果存在“\\%%i\C$\ProgramData\config.cfg”设置“install=ok”
如果定义为美元(
如果已定义,请安装(
呼叫:updatecfg%%i
)否则(
呼叫:installerror%%i
)
)否则(
电话:errorshare%%i
)
)
....

。。。。
对于/f“usebackq delims=“%”中的%%i(“%~dp0hostnames.txt”)执行以下操作(
rem测试访问管理共享C$
如果存在“\\%%i\C$\Windows\System32”(设置“dollar=yes”)其他(设置“dollar=”)
rem测试装置完整性
如果存在“\\%%i\C$\ProgramData\config.cfg”(设置“install=ok”)或(设置“install=”)
如果定义为美元(
如果已定义,请安装(
呼叫:updatecfg%%i
)否则(
呼叫:installerror%%i
)
)否则(
电话:errorshare%%i
)
)
....
在任何情况下,在根据变量的内容做出决定之前,都应确保变量具有适当的值。

。。。。
对于/f“usebackq delims=“%”中的%%i(“%~dp0hostnames.txt”)执行以下操作(
rem清除每个迭代的变量
设置“美元=”
设置“安装=”
rem测试访问管理共享C$
如果存在“\\%%i\C$\Windows\System32”设置“美元=是”
rem测试装置完整性
如果存在“\\%%i\C$\ProgramData\config.cfg”设置“install=ok”
如果定义为美元(
如果已定义,请安装(
呼叫:updatecfg%%i
)否则(
呼叫:installerror%%i
)
)否则(
电话:errorshare%%i
)
)
....

。。。。
对于/f“usebackq delims=“%”中的%%i(“%~dp0hostnames.txt”)执行以下操作(
rem测试访问管理共享C$
如果存在“\\%%i\C$\Windows\System32”(设置“dollar=yes”)其他(设置“dollar=”)
rem测试装置完整性
如果存在“\\%%i\C$\ProgramData\config.cfg”(设置“install=ok”)或(设置“install=”)
如果定义为美元(
如果已定义,请安装(
呼叫:updatecfg%%i
)否则(
呼叫:installerror%%i
)
)否则(
电话:errorshare%%i
)
)
....

在任何情况下,在根据变量的内容做出决定之前,您都应该确保变量具有适当的值。

如果存在“\\%%i\C$\Windows\System32”(设置“dollar=yes”)否则(设置“dollar=”)
。另外,如果“!dollar!”==“yes”,你应该使用
语法来避免语法错误(当
!dollar!
为空时)更新原始帖子…请不要在问题的脚本中实现解决方案,因为这样线程就不再有意义,特别是对于任何新访问者;如果您确实希望显示脚本的最终功能版本,请发布您自己的答案…
如果存在“\\%%i\C$\Windows\System32”(设置“dollar=yes”)或者(设置“dollar=”)
。另外,如果“!dollar!”==“yes”,你应该使用
语法来避免语法错误(当
!dollar!
为空时)更新原始帖子…请不要在问题的脚本中实现解决方案,因为这样线程就不再有意义,特别是对于任何新访问者;如果你真的想展示你的脚本的最终功能版本,请发布你自己的答案……很好,正是我所需要的。现在我知道我需要清除/重置这种脚本中的变量。还有一些方法可以做到这一点!我刚在开始时添加了Set“dollar=”&Set“install=”。更新了OP。很好,正是我需要的。现在我知道我需要清除/重置这种脚本中的变量。还有一些方法可以做到这一点!我刚在开始时添加了Set“dollar=”&Set“install=”。更新作品。