Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Windows 无法比较通过bat文件声明为成功/失败状态的变量_Windows_Batch File_Command Line_Cmd_Command - Fatal编程技术网

Windows 无法比较通过bat文件声明为成功/失败状态的变量

Windows 无法比较通过bat文件声明为成功/失败状态的变量,windows,batch-file,command-line,cmd,command,Windows,Batch File,Command Line,Cmd,Command,我创建了一个bat文件,以查找在主文件中定义的文件夹列表中包含子文件夹的文件夹 脚本: @echo off REM SetLocal EnableDelayedExpansion for /F "delims=" %%a in (D:\Temp\A\folder_creation\FRONT_OFFICE_SERVER.txt) do ( pause echo %%a (echo %%a |find /I "\" > null && set COUNTER='SUB' ||

我创建了一个bat文件,以查找在主文件中定义的文件夹列表中包含子文件夹的文件夹

脚本:

@echo off
REM SetLocal EnableDelayedExpansion
for /F "delims=" %%a in (D:\Temp\A\folder_creation\FRONT_OFFICE_SERVER.txt) do (
pause
echo %%a
(echo %%a |find /I "\" > null && set COUNTER='SUB' || set COUNTER='NO_SUB') >> abc.log
pause
SetLocal EnableDelayedExpansion
echo counter is !COUNTER!
pause
set SUB='SUB'
IF !COUNTER!=='%SUB%' ( 
echo %%a has a subfolder
pause
SET !COUNTER!=ABC
) ELSE (
echo %%a doesnt have a subfolder
pause
SET !COUNTER!=ABC
)
)
前台办公服务器.txt文件内容

ABC
DEF
ABC\DEF
ABC\GHI
TEMP
A
B\A
在这里,脚本运行并循环文本文件中提到的文件夹名称,并根据提供的验证进入循环。但每次循环进行时,它要么进入IF子句,要么进入else子句,而不是根据子文件夹的存在情况

我的意图是,如果子文件夹不存在,则在If子句下运行命令集,如果sbfolder存在,则在else部分运行命令

我觉得这是因为if验证,在这里我丢失了所用局部变量的单引号或双引号


有人能帮我一下吗?从昨天开始,这个小的悬而未决的东西已经完成了整个工作。

下面是一个示例脚本,展示了一个更简单的思考过程:

@Echo Off
For /F "Delims=" %%I In (D:\Temp\A\folder_creation\FRONT_OFFICE_SERVER.txt) Do (
    If "%%~nI" Equ "%%~I" (
        Echo=[%%I] No Sub - run the set of commands
    ) Else (
        Echo=[%%~I] Sub exists - run the part commands
    )
)
Pause

希望对您有所帮助,

以下是一个示例脚本,展示了一个更简单的思考过程:

@Echo Off
For /F "Delims=" %%I In (D:\Temp\A\folder_creation\FRONT_OFFICE_SERVER.txt) Do (
    If "%%~nI" Equ "%%~I" (
        Echo=[%%I] No Sub - run the set of commands
    ) Else (
        Echo=[%%~I] Sub exists - run the part commands
    )
)
Pause

希望能对您有所帮助,

我们非常感谢您的早期回复,因为其余工作取决于上述问题的解决:(添加
echo IF!COUNTER!='%SUB%'
set SUB='SUB'
之后立即添加
echo IF!COUNTER!='%SUB%'
您可能会看到一些错误,可能是意想不到的,例如
IF'SUB'='SUB'
@JosefZ我尝试过删除
set SUB=SUB
中的引号,但没有成功:(非常感谢任何早期响应,因为其余工作取决于上述待解决问题:(添加
echo IF!COUNTER!='%SUB%'
set SUB='SUB'
之后立即添加
echo IF!COUNTER!='%SUB%'
您可以看到一些错误,可能是意想不到的事情,例如
IF'SUB'='SUB'
@JosefZ我尝试过删除
set SUB=SUB
中的引号,但没有成功:(您能帮我解释一下使用
“%%~nI”之间的区别吗
“%%~I”
%%~I-展开%I,删除任何周围的引号(“),%%nI-仅将%I扩展为文件/文件夹名。在这种情况下,最后一个反斜杠后的所有内容都将被视为文件/文件夹名。逻辑是,如果展开时单词不同,则它必须是子文件夹。@user207517,请阅读
for
命令的帮助。它对该命令进行了很好的解释。您能帮助解决usi之间的差异吗ng
“%%~nI”
“%%~I”
%%~I-展开%I,删除任何周围的引号(“),%%nI-仅将%I扩展为文件/文件夹名。在这种情况下,最后一个反斜杠后面的所有内容都将被视为文件/文件夹名。逻辑是,如果展开时单词不同,则它必须是子文件夹。@user207517,请阅读
for
命令的帮助。该命令解释得很好。