From 196fb10c327241f3a27a96faa44e149160395c85 Mon Sep 17 00:00:00 2001 From: Jason Edmeades Date: Fri, 15 Jun 2007 20:59:29 +0100 Subject: [PATCH] cmd.exe: for loop by default only matches files. --- programs/cmd/builtins.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index a7642281e1c..2a075c53fdb 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -593,6 +593,7 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) { WCHAR variable[4]; WCHAR *firstCmd; int thisDepth; + BOOL isDirs = FALSE; /* Check: the first line includes the % variable name as first parm @@ -667,10 +668,15 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) { hff = FindFirstFile (item, &fd); if (hff != INVALID_HANDLE_VALUE) { do { - thisCmdStart = cmdStart; - WINE_TRACE("Processing FOR filename %s\n", wine_dbgstr_w(fd.cFileName)); - WCMD_part_execute (&thisCmdStart, firstCmd, variable, - fd.cFileName, FALSE, TRUE); + BOOL isDirectory = (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); + if ((isDirs && isDirectory) || + (!isDirs && !isDirectory)) + { + thisCmdStart = cmdStart; + WINE_TRACE("Processing FOR filename %s\n", wine_dbgstr_w(fd.cFileName)); + WCMD_part_execute (&thisCmdStart, firstCmd, variable, + fd.cFileName, FALSE, TRUE); + } } while (FindNextFile(hff, &fd) != 0); FindClose (hff);