I wanted to delete several files located in ASM within a MS-DOS batch:
REM Script: asm_cleanup_DB112.cmd set ORACLE_BASE=E:\oracle set ORACLE_HOME=E:\oracle\product\grid-11.2.0 set ORACLE_SID=+ASM set PATH=%ORACLE_HOME%\bin;%PATH% asmcmd rm -f +TEMP/db112/temp_01.dbf asmcmd rm -f +TEMP/db112/temp_02.dbf asmcmd rm -f +REDO1/db112/redog1m1.dbf asmcmd rm -f +REDO1/db112/redog2m1.dbf asmcmd rm -f +REDO1/db112/redog3m1.dbf asmcmd rm -f +REDO1/db112/redog1m2.dbf asmcmd rm -f +REDO1/db112/redog2m2.dbf asmcmd rm -f +REDO1/db112/redog3m2.dbf
As soon as I run the batch, the first file got deleted, but then the batch execution stops without continuing the next steps :-( I try to place the files into Single-Quotes, into Double-Quotes, but nothing helps, after the first asmcmd command the batch execution stops ...
This behaviour even occurs with "ls" commands and so on.
Oracle Metalink search = 0
Oracle Technet Forums = 1 thread with the same problem, but no answer since more then 2 years
After a little playing and re-thinking, I only found following solution: Build a FOR Loop in my batch.
I just created a textfile with my files which I want to delete:
# Content of File asm_file_list.txt +TEMP/db112/temp_01.dbf +TEMP/db112/temp_02.dbf +REDO1/db112/redog1m1.dbf +REDO1/db112/redog2m1.dbf +REDO1/db112/redog3m1.dbf +REDO1/db112/redog1m2.dbf +REDO1/db112/redog2m2.dbf +REDO1/db112/redog3m2.dbf
Then I changed my batch to the FOR loop, which simple reads my above textfile with the list of my files to be delete and executed for each line the "asmcmd rm -f" command:
REM Script: asm_cleanup_DB112.cmd set ORACLE_BASE=E:\oracle set ORACLE_HOME=E:\oracle\product\grid-11.2.0 set ORACLE_SID=+ASM set PATH=%ORACLE_HOME%\bin;%PATH% for /f %%a in (asm_file_list.txt) do ( asmcmd rm -f %%a )
Run the batch again and be happy :-)