goldenmean
goldenmean

Reputation: 19036

Exclusion of files of certain extension

In a Windows cmd batch script named my.bat, I want to execute a command for all the files in the current directory except for the batch file my.bat. I use below command in my.bat currently to run the command only for *.txt *.ppt, but really as new files of different extensions might be added to the folder and hence execution of this command by excluding one type of file extension (in my case *.bat) would be more readable/helpful.

FOR /F "delims=|" %%i IN ('dir /b *.txt *.ppt') DO echo %%i

Question is: How do I exclude that file alone with that particular file extension and make the for command execute on all files of all extensions except the excluded one?

Upvotes: 1

Views: 6052

Answers (2)

Bali C
Bali C

Reputation: 31251

FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do if not %%~xi==.bat echo %%i

I have added tokens=* in as well otherwise you won't get full filenames if they have spaces.

To echo without the dot

setlocal enabledelayedexpansion
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do (
set e=%%~xi
set e=!e:.=!
echo !e!
)

This is providing that the file doesn't have any other dots, otherwise it will remove them too. This is a bit more sturdy than just removing the 4th character from the end though, as not all files have a 3 character extension.

Upvotes: 3

icabod
icabod

Reputation: 7084

You could pass the output of the dir /b command through findstr, like so:

FOR /F "delims=|" %%i IN ('dir /b ^| findstr /v /r "^my.bat$"') DO echo %%i

The /v option to findstr prints anything that doesn't match the parameter. The match is based on a regular expression that matches only lines that contain my.bat and nothing else.

Upvotes: 1

Related Questions