Click to See Complete Forum and Search --> : Help with DOS batch script - nested script calling


anon0
February 2nd, 2009, 05:13 PM
hi all, it was suggested that I post this here:

I'm trying to have a main batch file recurse through its subdirectories and call any batch files it encounters there. My problem is limiting the scope each batch to its own subdirectory. It's not really DOS but the Windows command prompt.

say you have these files
c:\temp\batch.bat

c:\temp\folder1\batch_deletes_txt.bat
c:\temp\folder1\file1.txt
c:\temp\folder1\file2.doc

c:\temp\folder2\batch_deletes_doc.bat
c:\temp\folder2\file3.txt
c:\temp\folder2\file4.doc

So, batch.bat should call batch_deletes_txt.bat which deletes file1.txt only (not file3.txt), and batch.bat should also call batch_deletes_doc.bat which deletes file4.doc only (not file2.doc).

My contents:

batch.bat:
for /r %%X in (*.bat) do if NOT %%X == %0 %%X
REM ^ the "if not" is to prevent infinite loops.

batch_deletes_txt.bat:
for /r %%X in (*.txt) do del "%%X"

batch_deletes_doc.bat:
for /r %%X in (*.doc) do del "%%X"

This doesn't work because the scope of each script is c:\temp, ie. not local. How do I fix this?

(My real goal is not deleting files, this is just an example)

gitter1226
February 2nd, 2009, 08:58 PM
I'm no batch script expert, but I *do* know that cd is the command used to change directories. Have you tried using that?

Have you considered perl? You could even write it inline on the command line if you'd like: perl -e "perl commands;"

anon0
February 2nd, 2009, 09:08 PM
I did think about using cd, but the question is how do you ask the first batch to cd into folders dynamically?

I'm only vaguely familiar with perl. An ordinary batch file would be preferred in this case...

dglienna
February 2nd, 2009, 10:48 PM
Use Powershell 2.0 CTP. It's a replacement for the DOS command language with its commandlets. You can use For-Each to loop thru folders dynamically

anon0
February 17th, 2009, 07:00 AM
Use Powershell 2.0 CTP. It's a replacement for the DOS command language with its commandlets. You can use For-Each to loop thru folders dynamically

thanks, I've never used it. Could someone explain how to do this in Powershell?