BATCH: FOR LOOP with IF ELSE , mysql 和目录

BATCH: FOR LOOP with IF ELSE , mysql and directory

我需要一些帮助。我想获取 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)

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

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

接下来的情况:

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 将目录更改回 path/folder 最近存储的 pushd命令;
  • usebackq 强制在 for /F 命令中使用替代引用样式;必不可少,因为您的命令包含 ' 单引号;
  • 作为一般原则,使用 %%~G~ argument modifier 来删除周围的引号 (");
  • echo mkdir "%pathxxx%\%%~G" 仅用于调试目的(调试时去掉 echo 字。