中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何将输入的带>等特殊符号的字符串作为变量值
作者:
标题: 如何将输入的带>等特殊符号的字符串作为变量值 上一主题 | 下一主题
cnLiou
新手上路





积分 16
发帖 6
注册 2008-5-10
状态 离线
『楼 主』:  如何将输入的带>等特殊符号的字符串作为变量值

想通过Set /P var=Input your sql script: 把输入的SQL语句赋值给var, 但涉及到类似如下语句(带有>等特殊符号) 时赋值不成功:
Select * from T_Test t where t.fDate >= to_date('2008-05-01','yyyy-mm-dd');

如果在特殊符号前加^, 那在输入SQL前会很麻烦, 请高手帮忙看看有没有其它办法可以解决的? 谢谢先.

2008-5-10 04:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

你是想用批处理连接数据库然后执行SQL吗?可以把SQL放到一个文本文件里面,在批处理中调用就行了。

2008-5-10 05:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
cnLiou
新手上路





积分 16
发帖 6
注册 2008-5-10
状态 离线
『第 3 楼』:  

本来是用sqlplus直接spool一个sql文件就行了, 但是我想做成bat, 只用一个文件生成sql, 所以在bat中作一个set /p sql=来获取输入的sql, 结果就碰到上面的问题, 关于特殊字符串如何赋值给变量可能会经常遇到, 查了很久没查到, 所以请高手们帮忙支招

2008-5-10 05:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  我的建议:

&&批处理对特殊字符特别是&><|感冒啊,建议楼主不要在这上面下大功夫,想想别的办法吧。



批处理之家新域名:www.bathome.net
2008-5-10 11:11
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

我一般是在BAT中用sqlplus调用sql文件

SQL_call.bat
@echo off
sqlplus /nolog @SQL_do.sql
exit
SQL_do.sql
--Use your own username, password, database
CONN username/password@database
SPOOL C:\result.xls
--Use your own SQL
SELECT SYSDATE FROM DUAL;
SPOOL OFF
EXIT
如果非要用一个BAT来实现,恐怕只有手工输入尖括号^进行转义吧?

2008-5-11 06:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 6 楼』:  

这个楼主看可否?
http://www.cn-dos.net/forum/viewthread.php?tid=40060
@echo off
call:ReversOut "12345&6" strs
::这种方法兼容特殊字符,但会过滤引号。
set/p "tt=%strs%"<nul

echo\&pause
exit

:: /*-------ReversOut--------------
:ReversOut ["string"] [string]
setlocal ENABLEEXTENSIONS
set "str=%~1"
:ReversOut_1
set "strs=%str:~0,1%%strs%"
set "str=%str:~1%"
if defined str goto:ReversOut_1
endlocal&set "%2=%strs%"&goto:eof
:: ---------ReversOut------------*/

@echo off||以行首文字重命名txt
for %%a in (*.txt)do call:renm "%%a"
exit
:renm
set "n="        :初始化n,一便n从1开始递增。
set/p t=<"%~1"
set t=%t:.=%
set t=%t:/=%
set t=%t:\=%
set t=%t:?=%
set t=%t::=%
set t=%t:;=%
set t=%t: =%
set t=%t:^*=%
set "t=%t:^<=%"
set "t=%t:^>=%"
set "t=%t:^|=%"
ren "%~1" "%t%%n%.txt"||set n=0&goto:renm1
exit/b
:renm1
set/a n+=1
ren "%~1" "%t%_%n%.txt"||goto:renm1
exit/b

@echo off
for %%a in (*.txt)do call:renm "%%a"
exit
:renm
set/p t=<"%~1"
set t=%t:.=%
set t=%t:/=%
set t=%t:\=%
set t=%t:?=%
set t=%t::=%
set t=%t:;=%
set t=%t: =%
set t=%t:^*=%
set "t=%t:^<=%"
set "t=%t:^>=%"
set "t=%t:^|=%"
ren "%~1" "%t%.txt"||ren "%~1" "%t%_1.txt"||ren "%~1" "%t%_2.txt"||ren "%~1" "%t%_3.txt"




山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-11 06:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
cnLiou
新手上路





积分 16
发帖 6
注册 2008-5-10
状态 离线
『第 7 楼』:  用了个打开编辑框来处理特殊字符无法输入的问题.

用了个打开编辑框来处理特殊字符无法输入的问题.
该工具可以直接根据SQL根据SQL导出数据到Excel等文件. 共享给大家.

@Echo Off
Title Oracle数据导出到文件工具 By LIOU
Color 0A
mode con cols=100 lines=40
PUSHD %CD%
SETLOCAL ENABLEDELAYEDEXPANSION

Echo =======================================================
Echo Oracle数据导出到文件工具 By LIOU
Echo =======================================================
Echo     使用方法:
Echo     Mstsc.bat [user/pass@oracle] [OutputFileName]
Echo =======================================================
Echo.

REM 默认值配置
REM ---------------
Set userpass=
Set oFile=Output.xls
REM ---------------
REM 默认值配置完成
Set WorkPath=C:

:Start
IF NOT "%1"=="" (
        Set userpass=%1
) ELSE (
        IF "%userpass%"=="" Set /P userpass=Input user and pass@Instante:
)

:InputFile
IF NOT "%2"=="" (
        Set oFile=%2
) ELSE (
        IF "%oFile%"=="" Set /P oFile=Input filename to export:
        IF "%oFile%"=="" Goto InputFile
)

IF EXIST %WorkPath%\%oFile% (
        Set /P ch=File %WorkPath%\%oFile% already exist, overwrite[y/n] n:
        IF /I "!ch!" NEQ "y" (
                Set oFile=
                Goto InputFile
        )
        set ch=
)

Set tempFile=%temp%\%date:-=%%time::=%.sql

Echo set term off feedback off verify off pagesize 999 set linesize 200>>%tempFile%
Echo set markup html on entmap ON spool on preformat off>>%tempFile%
Echo define oFile = '%WorkPath%\%oFile%'>>%tempFile%
Echo prompt *** Spooling to %WorkPath%\%oFile% *** >>%tempFile%

Echo spool %WorkPath%\%oFile%>>%tempFile%
Echo --在下面一行输入你要导出的SQL查询脚本,并保存退出文本编辑器......>>%tempFile%
Echo 按下任意键输入SQL语句, 并保存退出文本编辑器......
REM Ping -n 2 Localhost>NUL
Pause>NUL
Start /WAIT Notepad.exe %tempFile%
>>%tempFile% Echo.
Echo spool off>>%tempFile%
Echo $Start %WorkPath%\%oFile%>>%tempFile%
Echo Exit>>%tempFile%

ECHO.
ECHO ---+批处理下使用sqlplus只能导出为txt文本文件,建议在plsql下执行sql可导出为Excel文件。+---
ECHO.
sqlplus %userpass% @%tempFile%
ECHO 导出数据到文件 %WorkPath%\%oFile% 成功,请核对!
ECHO.
ECHO.
Goto Start

2008-5-12 22:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: