最近遇到需要按一目录下每个DMP文件的文件名(不包括后缀)创建数据库用户,并把同名DMP文件中的数据导入相应的各个用户中。
思前想后,决定用批处理来完成这工作。
多个DMP文件我这是放在C:\Users\Administrator\Desktop\数据\
批处理文件和相关文件则是放在了C:\Users\Administrator\Desktop\批处理\
下面是我的BAT文件内容:
@echo off
setlocal enabledelayedexpansion
set dir=C:\Users\Administrator\Desktop\数据
for /f %%j in ('dir /b C:\Users\Administrator\Desktop\数据\*.DMP') do (
for /f "eol=* tokens=*" %%k in (create.sql) do (
set a=%%k
set "var=!a:123=%%~nj!"
echo !var!>>$
echo !a!>>#)
move $ create.sql
sqlplus /@TEST AS SYSDBA @C:\Users\Administrator\Desktop\批处理\create.sql
set b=%%~nj&imp \"!b!/pass1009@TEST\" fromuser=!b! touser=!b! FILE=!dir!\!b!.DMP LOG=!dir!\!b!.LOG
move # create.sql
)
echo ---------------------------------------------
pause
其中
for /f %%j in ('dir /b C:\Users\Administrator\Desktop\数据\*.DMP') do (......)
这里完成了对目录的整个遍历,并找出.DMP文件,获取文件名至变量J中(这里的j还是带后缀的)
如果想纯粹获取文件名:echo %%~nj(该操作输出不带后缀的文件名)
因为要动态创建用户,所以create.sql中的语句每次循环都需要替换用户名的