# Delete files with names matching a list

I am using Windows 7. I have a directory with a very large number of xml files. I want to delete all files such as the name is included in a list I have. For the sake of argument, let's say this consists only of the names

file1.xml
file2.xml

I think it should be possible to create a .bat file which does this for me, rather than do it manually, which would take ages? If so, I would be very grateful if someone could provide an example of such a Windows script.
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
Here is the code...

You just need to set source folder and the script will erase anything that matches the pattern... FILE*.XML..

@echo off
set source=C:\30092014
for /f "tokens=*" %%a in ('dir /b /a-d "%source%\file*.xml"') do call del %%a

0
Author Commented:
Thanks, but as I said the names I gave were just an example. The names of the files I need to delete don't match any sort of pattern, unfortunately.

Let's say I have a file called NODELETE.txt, which is just a long list of names of files I do NOT want to delete. I need a script which will delete all files whose names are not included in NODELETE.txt.

0
Commented:
ok, try this.. file list.txt contains list of file to be deleted

@echo off
set source=C:\30092014
for /f "Tokens=* Delims=" %%x in (list.txt) do del %%x

0

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Author Commented:
Thanks, works great
0
Commented:
Based off of your first question, you have a list of files that you need deleted.  Below is a powershell script that will do just what you need.  I know you asked for a bat file, but having Windows 7 gives you powershell which is by far more robust than command prompt.  The below code has the paths hard coded in but can easily be changed to take the paths as parameters.  Save the code to a file with the .ps1 extension and replace the paths with the proper paths to the text file that has the list of files to be deleted and the directory the files to be deleted are located.  Be sure the text file has one name per line.

$fileNameList = gc "C:\path\to\list\of\names.txt"$directory="C:\path\to\directory"
$filesInDir = gci$directory

foreach ($file in$filesInDir) {
foreach ($name in$fileNameList) {
if (($file.name).Contains($name)) { remove-item \$file.fullname}
}
}


If you have administrator rights to the system you will have to change the execution policy on powershell to allow .ps1 scripts to be ran.  This only has to be done once for the user running .ps1 scripts, run powershell as administrator and copy/paste the below code to it.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted


If you prefer to keep the ExecutionPolicy Restricted which requires the scripts be signed.  Then run the below code in powershell or command prompt.

powershell -executionpolicy bypass -file C:\path\to\script.ps1

0
###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Windows 7

From novice to tech pro — start learning today.