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