本文介绍了批:对于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, here pathxxx;
  • instead of chdir command used pushd .. popd pair: popd will change directory back to the path/folder most recently stored by the pushd command;
  • usebackq forces alternate quoting style in for /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 the echo word when debugged.

这篇关于批:对于IF ELSE,mysql和目录LOOP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 11:20