仅在该目录存在的情况下,我才尝试查找该目录中的最新子文件夹。当我在FOR
语句中使用IF
循环时,我的代码没有任何输出。这是我的代码-
@echo off
IF EXIST "D:\MyDirectory" (
FOR /F "delims=" %%i IN ('dir "D:\MyDirectory" /b /ad-h /t:c /od') DO SET abc=%%i
echo Most recent subfolder: %abc%
) ELSE (
echo Directory not found
)
我的代码可以单独正常工作
1。要单独检查目录是否存在,
IF EXIST "D:\MyDirectory" (
echo Directory exists
) ELSE (
echo Directory does not exists
)
2。要找到最新的文件夹,
FOR /F "delims=" %%i IN ('dir "D:\MyDirectory" /b /ad-h /t:c /od')
DO SET abc=%%i
echo Most recent subfolder: %abc%
基本上,当我不结合FOR
循环和IF
语句时,我得到的是最新文件夹的正确输出。我在这里观察到的是,当我们在FOR
语句中使用IF
循环时,代码回显了变量'abc'的空白输出。我的问题是,批处理脚本是否不允许我们在IF语句中使用FOR
循环?如果是这样,我可以在这里采取任何变通方法以达到预期的结果吗?
答案 0 :(得分:0)
是的,您可以在IF内使用FOR。
在您的代码中,在读取整个IF语句之前(在set语句分配它之前),在嵌套的echo语句中扩展了%abc%。如果在退出外观后查看abc,则应正确设置abc。您还可以在执行IF语句之前尝试将ABC设置为诸如FOO的告诉值,然后您将看到它回显了告诉值。 IF执行后将正确设置该值。
setlocal enabledelayedexpansion
IF EXIST "D:\MyDirectory" (
FOR /F "delims=" %%i IN ('dir "D:\MyDirectory" /b /ad-h /t:c /od') DO SET abc=%%i
echo Most recent subfolder: !abc!
) ELSE (
echo Directory not found
)
您需要做的是启用延迟扩展,然后回显!abc!而不是%abc%。
键入“帮助集”,然后查找“延迟的环境变量扩展”以获取更多详细信息。
另一种方法是用对IF语句之外的子例程的调用替换echo语句。解析IF语句时将使用call语句,但是子例程中的语句将被正常评估。
请注意,循环控制变量%% i在循环执行之前无法解析-可以保留%符号。