仅当该目录存在批处理脚本时才在该目录中查找最新的子文件夹
Find the latest sub-folder within a directory only if that directory exists batch script
我试图仅在该目录存在的情况下在该目录中查找最新的子文件夹。当我在 IF
语句中使用 FOR
循环时,我的代码没有给我任何输出。这是我的代码 -
@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
语句时,我会得到最新文件夹的正确输出。我在这里观察到的是,当我们在 IF
语句中使用 FOR
循环时,代码回显变量 'abc' 的空白输出。我的问题是,批处理脚本不允许我们在 IF 语句中使用 FOR
循环吗?如果是这样,我可以在这里采取任何解决方法来达到预期的结果吗?
是的,您可以在 IF 中使用 FOR。
在您的代码中,当整个 IF 语句被读取时,%abc% 在您的嵌套 echo 语句中被展开,然后您的 set 语句分配它。如果在 for look 退出后查看 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
)
你需要做的是开启延迟展开,然后echo !abc!而不是 %abc%.
键入 "help set" 并查找 "Delayed environment variable expansion" 以获取更多详细信息。
另一种方法是将 echo 语句替换为对 IF 语句之外的子例程的调用。 call语句本身会在解析IF语句的时候,但是子程序中的语句会正常求值。
请注意,循环控制变量 %%i 在循环执行之前未解析 - 可以保留 % 符号。
我试图仅在该目录存在的情况下在该目录中查找最新的子文件夹。当我在 IF
语句中使用 FOR
循环时,我的代码没有给我任何输出。这是我的代码 -
@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
语句时,我会得到最新文件夹的正确输出。我在这里观察到的是,当我们在 IF
语句中使用 FOR
循环时,代码回显变量 'abc' 的空白输出。我的问题是,批处理脚本不允许我们在 IF 语句中使用 FOR
循环吗?如果是这样,我可以在这里采取任何解决方法来达到预期的结果吗?
是的,您可以在 IF 中使用 FOR。
在您的代码中,当整个 IF 语句被读取时,%abc% 在您的嵌套 echo 语句中被展开,然后您的 set 语句分配它。如果在 for look 退出后查看 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
)
你需要做的是开启延迟展开,然后echo !abc!而不是 %abc%.
键入 "help set" 并查找 "Delayed environment variable expansion" 以获取更多详细信息。
另一种方法是将 echo 语句替换为对 IF 语句之外的子例程的调用。 call语句本身会在解析IF语句的时候,但是子程序中的语句会正常求值。
请注意,循环控制变量 %%i 在循环执行之前未解析 - 可以保留 % 符号。