BATCH:用IF ELSE,mysql和目录进行循环

时间:2015-02-10 08:49:25

标签: mysql batch-file

我需要一些帮助。我想在MySQL中获取数据库名称,使其成为目录名称。但我的代码不正确。它失败了。

e.g
DATABASE NAME 
- sample
- sample_test

我想创建一个与数据库名称相同的目录。

我的代码是:

@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)

我得到了这个结果:我添加暂停命令来暂停终端,显示器是

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 . . .

当我测试它时,输出是正确的

 @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

输出:

 sample
 sample_test
 Press any key to continue . . .

1 个答案:

答案 0 :(得分:1)

在下一种情况下:

mysql -uroot -N -B -e "SHOW DATABASES LIKE '%sample%'" 
sample
sample_test
Press any key to continue . . .

这个批处理脚本应该可以工作:

 @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

注意:

  • 不要更改系统环境变量path,甚至不要暂时更改;使用另一个变量名称,pathxxx;
  • 而不是使用chdir命令pushd .. popd对:popd会将目录更改回pushd最近存储的路径/文件夹命令;
  • usebackq强制for /F命令中的备用引用样式;必不可少的,因为您的命令包含'单引号;
  • 作为一般原则,使用%%~G~ argument modifier一起删除周围的引号(")(如果有的话);
  • echo mkdir "%pathxxx%\%%~G"仅用于调试目的(在调试时删除echo字。