Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用批处理文件使用条件语句一次运行一个脚本_Windows_Oracle_Batch File_Cmd_Sqlplus - Fatal编程技术网

Windows 使用批处理文件使用条件语句一次运行一个脚本

Windows 使用批处理文件使用条件语句一次运行一个脚本,windows,oracle,batch-file,cmd,sqlplus,Windows,Oracle,Batch File,Cmd,Sqlplus,我有许多脚本保存在一个文件夹中,将由批处理文件根据层次结构一次运行一个脚本。我开发了简单的批处理文件 sqlplus username/password@database @/apps/Batch/script_1.txt mkdir Results move "script_1.txt" Results 在运行结束时,脚本_1.txt被移动到另一个文件夹。 我还有其他脚本-script_2.txt、script_3.txt等等-但我希望有一个场景,运行批处理文件只按层次结构执行最前面的文件,

我有许多脚本保存在一个文件夹中,将由批处理文件根据层次结构一次运行一个脚本。我开发了简单的批处理文件

sqlplus username/password@database
@/apps/Batch/script_1.txt
mkdir Results
move "script_1.txt" Results
在运行结束时,脚本_1.txt被移动到另一个文件夹。 我还有其他脚本-script_2.txt、script_3.txt等等-但我希望有一个场景,运行批处理文件只按层次结构执行最前面的文件,即再次运行批处理文件将执行script_2.txt等等


是否有任何语句可以帮助解决此问题?

您可以使用FOR循环遍历目录中的所有文件,在SQLPlus中运行这些文件,然后将它们移动到其他文件夹。 例如,如果我有一个run.cmd,如下所示:

@echo off
for %%i in (*.sql) do (sqlplus siu/siu@middle_svil @%%i
IF NOT EXIST "Results" mkdir "Results"
move %%i Results
)
以及一组3个SQL脚本script_1、script_2、script_3,如下所示:

脚本\u 1.sql:

set serveroutput on
prompt this is script 1
exit
set serveroutput on
prompt this is script 2
exit
set serveroutput on
prompt this is script 3
exit
脚本2.sql:

set serveroutput on
prompt this is script 1
exit
set serveroutput on
prompt this is script 2
exit
set serveroutput on
prompt this is script 3
exit
脚本3.sql:

set serveroutput on
prompt this is script 1
exit
set serveroutput on
prompt this is script 2
exit
set serveroutput on
prompt this is script 3
exit
这是我在开始时所拥有的:

D:\test>dir

23/03/2017  09:28    <DIR>          .
23/03/2017  09:28    <DIR>          ..
23/03/2017  09:28    <DIR>          Results
23/03/2017  09:24               127 run.cmd
22/03/2017  14:09                50 script_1.sql
22/03/2017  14:08                50 script_2.sql
22/03/2017  14:13                50 script_3.sql
               4 File            277 byte
如您所见,3SQL脚本已运行,文件已移动到新目录中

事实上:

D:\test>dir


23/03/2017  09:28    <DIR>          .
23/03/2017  09:28    <DIR>          ..
23/03/2017  09:28    <DIR>          Results
23/03/2017  09:24               127 run.cmd
               1 File            127 byte

D:\test>cd results

D:\test\Results>dir

23/03/2017  09:28    <DIR>          .
23/03/2017  09:28    <DIR>          ..
22/03/2017  14:09                50 script_1.sql
22/03/2017  14:08                50 script_2.sql
22/03/2017  14:13                50 script_3.sql
               3 File            150 byte

D:\test\Results>

您可以使用FOR循环浏览目录中的所有文件,在SQLPlus中运行它们,然后将它们移动到其他文件夹。 例如,如果我有一个run.cmd,如下所示:

@echo off
for %%i in (*.sql) do (sqlplus siu/siu@middle_svil @%%i
IF NOT EXIST "Results" mkdir "Results"
move %%i Results
)
以及一组3个SQL脚本script_1、script_2、script_3,如下所示:

脚本\u 1.sql:

set serveroutput on
prompt this is script 1
exit
set serveroutput on
prompt this is script 2
exit
set serveroutput on
prompt this is script 3
exit
脚本2.sql:

set serveroutput on
prompt this is script 1
exit
set serveroutput on
prompt this is script 2
exit
set serveroutput on
prompt this is script 3
exit
脚本3.sql:

set serveroutput on
prompt this is script 1
exit
set serveroutput on
prompt this is script 2
exit
set serveroutput on
prompt this is script 3
exit
这是我在开始时所拥有的:

D:\test>dir

23/03/2017  09:28    <DIR>          .
23/03/2017  09:28    <DIR>          ..
23/03/2017  09:28    <DIR>          Results
23/03/2017  09:24               127 run.cmd
22/03/2017  14:09                50 script_1.sql
22/03/2017  14:08                50 script_2.sql
22/03/2017  14:13                50 script_3.sql
               4 File            277 byte
如您所见,3SQL脚本已运行,文件已移动到新目录中

事实上:

D:\test>dir


23/03/2017  09:28    <DIR>          .
23/03/2017  09:28    <DIR>          ..
23/03/2017  09:28    <DIR>          Results
23/03/2017  09:24               127 run.cmd
               1 File            127 byte

D:\test>cd results

D:\test\Results>dir

23/03/2017  09:28    <DIR>          .
23/03/2017  09:28    <DIR>          ..
22/03/2017  14:09                50 script_1.sql
22/03/2017  14:08                50 script_2.sql
22/03/2017  14:13                50 script_3.sql
               3 File            150 byte

D:\test\Results>


提供的简单批处理文件是否按预期工作?不幸的是,它没有。我在cmd中运行了这些行,它们是独立工作的,我认为将它们放在一个批处理文件中会得到相同的结果。现在我有一个新的挑战。有任何关于挑战的帮助吗?可能是使用
sqlplus用户名/password@database@/apps/Batch/script_1.txt
在一行中,它可以用于特定的
script_1.txt
?感谢JosefZ,但它不会继续执行命令以创建“Results”文件夹并将script_1.txt移动到相同的位置。是否可以将命令放在同一批处理文件中?将
pause
命令添加到批处理脚本的末尾,并使用按钮显示错误消息(遵循规则)。我猜
系统找不到指定的文件
。尝试
move“\apps\batch\script\u 1.txt”结果
提供的简单批处理文件是否按预期工作?不幸的是,它没有。我在cmd中运行了这些行,它们是独立工作的,我认为将它们放在一个批处理文件中会得到相同的结果。现在我有一个新的挑战。有任何关于挑战的帮助吗?可能是使用
sqlplus用户名/password@database@/apps/Batch/script_1.txt
在一行中,它可以用于特定的
script_1.txt
?感谢JosefZ,但它不会继续执行命令以创建“Results”文件夹并将script_1.txt移动到相同的位置。是否可以将命令放在同一批处理文件中?将
pause
命令添加到批处理脚本的末尾,并使用按钮显示错误消息(遵循规则)。我猜
系统找不到指定的文件
。请尝试
move“\apps\batch\script_1.txt”结果
谢谢,但这只会在(*.sql)do(sqlplus用户)中运行“for%%i”之前的sql脚本/password@DB@%%i“登录数据库并执行sql语句后,它必须退出数据库并返回目录以创建文件夹或移动文件。添加“退出暂停”也不起作用。我希望将命令放在一个批处理文件中,该文件可以登录数据库、运行查询、退出数据库、在目录中创建文件夹并将sql脚本移动到文件夹中。如果在每个sql脚本的末尾都放一个出口,这将选择第一个脚本“连接到DBm”“运行脚本”;sql脚本将关闭DB connectiob使用exit命令,从而将控件返回到批处理。现在批处理将创建目录,移动文件,然后转到下一个sql脚本。好的。我对这一点进行了排序。另一方面,我不打算同时运行这3个脚本。运行.cmd文件应优先选择脚本_1.sql,仅按层次结构,例如执行它,创建一个新文件夹并将其移动到文件夹中。再次运行.cmd文件应执行脚本2,因为它是层次结构中最重要的,创建一个新文件夹并移动。我尝试使用FOR循环或设置一些变量增量,但似乎无法对其进行排序。有什么想法吗?在运行SQL后添加一些内容以停止批处理脚本应该足够了。我只是编辑了一下,向您展示了很多内容。效果非常好。最后一点-是否有可能在任何时候执行.cmd时,都会创建一个带有后缀的新文件夹,如_1、_2等。本质上,第一次运行cmd会产生文件夹“结果”将脚本_1移入其中后,第二次将创建结果_1文件夹和脚本_2移入,以此类推……谢谢,但这只会将sql脚本运行到“for%%i in(*.sql)do(sqlplus user/password@DB@%%i”在登录数据库并执行sql语句后,它必须退出数据库并返回目录以创建文件夹或移动文件。添加“退出暂停”也不起作用。我希望将命令放在一个批处理文件中,该文件可以登录数据库、运行查询、退出数据库、在目录中创建文件夹并将sql脚本移动到文件夹中。如果在每个sql脚本的末尾都放一个出口,这将选择第一个脚本“连接到DBm”“运行脚本”;sql脚本将关闭DB c使用exit命令onnectiob,从而将控件返回到批处理。现在批处理将创建目录,移动文件,然后转到下一个sql脚本。好的。我对这一位进行了排序。另一方面,我不打算同时运行这3个脚本。运行.cmd文件