bat 中,有時候,我們需要文件夾操作之前,希望知道文件夾是否問空,如果為空,就沒必要執行后續操作,我的bat腳本如下:
@echo off setlocal ENABLEDELAYEDEXPANSION set "dir_flag=" for /F %%s in ( 'dir /B target' ) do ( set dir_flag=%%s ) if "!dir_flag!" == "" ( echo target dir is null exit 0 )else ( echo target dir not null )
關於上述腳本的解讀如下:
setlocal ENABLEDELAYEDEXPANSION 是設置環境變量延遲生效,主要是后面的for中使用和后面的!dir_flag!變量的讀取,關於環境變量延遲,請自行百度
set "dir_flag=" 設置初始值為空,如果你要設置初始值為0之類的,可以 set "dir_flag=0"
for /F %%s in ( 'dir /B target' ) do ( set dir_flag=%%s ) 這是bat的命令賦值方式,將dir /B的執行結果復制給dir_flag,類似shell的dir_flag=`ls target`,
具體就是dir /B target執行后會顯示target文件夾下的文件名,如果有文件,那么dir_flag就不空,如果沒文件,就是空的,關於命令賦值的方式,可以參考我的另外的博客:
bat/cmd將命令執行的結果賦值給變量
if "!dir_flag!" == "" 這一句是判斷上面賦值的dir_flag是否為空
另外,exit 0這里是退出腳本,如果你使用的是函數,可以使用goto:eof退出函數。
上面腳本的執行結果如下:
(1)當target下有文件時:

(2)當target下沒文件時