本文介绍了批:对于IF ELSE,mysql和目录LOOP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要一些帮助。我想在MySQL中获取数据库名称,使之为目录名。但我的code是不正确的。它失败。
例如
数据库名
- 样本
- sample_test
我想创建一个目录同名的数据库名。
我的code是:
关闭@echo
SET PATH = C:\\用户\\ NECA \\桌面
CD C:\\ WAMP \\ BIN \\ mysql的\\ mysql5.5.24 \\ BIN
设置用户名=根
SET为userpass =根MySQL的-u%USERNAME%-r%为userpass%-N -B -eSHOW数据库,如'%%样本%%'|
FOR / F %% D IN('C:\\ WINDOWS \\ SYSTEM32 \\ FINDSTR / VINFORMATION_SCHEMA performance_schema')DO @echo %%ð
如果存在%PATH%\\ %% D(回声%% D的存在是)
ELSE(MKDIR%路径%\\ %% D&放大器;&安培;回声%%ð创建)
我得到了这样的结果:我补充暂停命令暂停终端和显示器
样品IF存在C:\\用户\\ NECA \\桌面\\样品(样品回声存在)
ELSE(MKDIR C:\\用户\\ NECA \\桌面\\样品创建样品)
preSS任意键继续。 。 。
当我测试它只是像这样的输出是正确的。
关闭@echo
SET PATH = C:\\用户\\ NECA \\桌面
CD C:\\ WAMP \\ BIN \\ mysql的\\ mysql5.5.24 \\ BIN
设置用户名=根 MySQL的-uroot -N -B -eSHOW数据库,如'%%样本%%'
暂停
输出:
样本
sample_test
preSS任意键继续。 。 。
解决方案
在接下来的情形:
的mysql -uroot -N -B -eSHOW DATABASES LIKE'%样本%'
样品
sample_test
preSS任意键继续。 。 。
该批处理脚本应该工作:
关闭@echo
PUSHD C:\\ WAMP \\ BIN \\ mysql的\\ mysql5.5.24 \\ BIN
SETpathxxx = C:\\用户\\ NECA \\桌面
SET用户名=根
FOR / F令牌有usebackq = *%%的G(
`的mysql -uroot -N -B -eSHOW数据库,如'%%样本%%'`
)做(
回波处理%% G
如果存在%pathxxx%\\ %%〜G(
呼应%%摹存在
)ELSE(
回声的mkdir%pathxxx%\\ %%〜G
回声%%摹创建
)
)
POPD
注:
- 请不要更改系统环境变量
路径
,即使暂时无法;使用另一个变量名,这里pathxxx
; - 而不是
CHDIR
使用命令PUSHD
..POPD
对:POPD
将切换回路径/文件夹,最近由PUSHD
命令保存; -
有usebackq
势力交替在FOR / F
命令引用风格;必要的,因为你的命令中包含 - 作为一般原则问题,使用
%%〜摹
与〜
的删除引号(),如果有的话;
-
回声的mkdir%pathxxx%\\ %%〜G
仅用于调试(摆脱回声
字调试时。
I need some help. I want to get the database name in MySQL to make it as directory name. But my code is not correct . it fails.
e.g
DATABASE NAME
- sample
- sample_test
i want to create a directory with the same name as database name.
my code is:
@echo off
SET path=C:\Users\neca\Desktop
cd C:\wamp\bin\mysql\mysql5.5.24\bin
SET UserName=root
SET UserPass=root
mysql -u%UserName% -r%UserPass% -N -B -e "SHOW DATABASES LIKE '%%sample%%'" |
FOR /F %%D IN ('C:\Windows\System32\findstr /V "information_schema performance_schema"') DO @echo %%D
IF exist %path%\%%D (echo %%D exist)
ELSE (mkdir %path%\%%D && echo %%D created)
i got this result: i add pause command to pause the terminal and the display is
sample IF exist C:\Users\neca\Desktop\sample (echo sample exist)
ELSE (mkdir C:\Users\neca\Desktop\sample sample created)
Press any key to continue . . .
when i test it just like this the output is correct
@echo off
SET path=C:\Users\neca\Desktop
cd C:\wamp\bin\mysql\mysql5.5.24\bin
SET UserName=root
mysql -uroot -N -B -e "SHOW DATABASES LIKE '%%sample%%'"
pause
output:
sample
sample_test
Press any key to continue . . .
解决方案
Under next circumstances:
mysql -uroot -N -B -e "SHOW DATABASES LIKE '%sample%'"
sample
sample_test
Press any key to continue . . .
this batch script should work:
@echo off
pushd C:\wamp\bin\mysql\mysql5.5.24\bin
SET "pathxxx=C:\Users\neca\Desktop"
SET "UserName=root"
for /F "usebackq tokens=*" %%G in (
`mysql -uroot -N -B -e "SHOW DATABASES LIKE '%%sample%%'"`
) do (
echo processing "%%G"
IF exist "%pathxxx%\%%~G" (
echo %%G exist
) ELSE (
echo mkdir "%pathxxx%\%%~G"
echo %%G created
)
)
popd
Notes:
- do not change the system environment variable
path
, not even temporarily; use another variable name, herepathxxx
; - instead of
chdir
command usedpushd
..popd
pair:popd
will change directory back to the path/folder most recently stored by thepushd
command; usebackq
forces alternate quoting style infor /F
command; essential as your command contains'
single quotes;- as a matter of general principle, used
%%~G
with the~
argument modifier to remove surrounding quotes ("
) if any; echo mkdir "%pathxxx%\%%~G"
for debugging purposes only (get rid of theecho
word when debugged.
这篇关于批:对于IF ELSE,mysql和目录LOOP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!