0

我有一个应该很容易解决的问题(我认为);由于对批处理命令和正确使用它们缺乏经验,我只是遇到了麻烦。

我有一个包含许多子文件夹的目录。这些子文件夹中的每一个都包含需要执行的 .sql 文件。但是,其中一个子文件夹根本不需要执行它的文件,而是必须保留在文件夹中(即我无权删除此文件夹并与其他文件夹一起工作)。

这是我目前所拥有的,但我不确定的是 IF NOT 语句;这应该如何正确写?

for /r %ROOT% %%b in (.) do (
if  NOT ==CertainFolder(
sqlcmd -S %SERVER% -d %DATABASE% -i %%~nb -b 
)

任何帮助将不胜感激;正如我所说,我是这种事情的新手,我所有的搜索都抛出了无用的东西;我觉得 for 正在使其具体化,这就是为什么我在参数方面不知所措的原因!

谢谢。

4

3 回答 3

1

使用 DIR /B /S 列出所有 SQL 文件,将结果通过管道传送到 FINDSTR 以过滤掉包含某个文件夹的路径。使用 FOR /F 处理结果,通过 SQLCMD 运行每个文件。

for /f "delims=" %%F in (
  'dir /b /a-d /s "%ROOT%\*.sql" ^| findstr /livc:"\\CertainFolder\\"'
) do sqlcmd -S %SERVER% -d %DATABASE% -i "%%F" -b

如前所述,此解决方案还将排除CertainFolder 子文件夹中的文件。例如,ROOT\CertainFolder\subFolder\name.sql将被排除在外

于 2013-07-30T20:16:59.330 回答
0
FOR /R %ROOT% %%b IN (.) DO IF /I NOT "%%~nxb" == "CertainFolder" SQLCMD -S %SERVER% -d %DATABASE% -i "%%~nxb" -b

只要确保CertainFolder被引用。您可以恢复嵌套,但这里不需要。

编辑:还要确保引用 %ROOT% 或使用“%ROOT%”。

于 2013-07-30T13:53:45.283 回答
0

尝试这个:

for /r "%ROOT%" %%b in (.) do if  NOT "%%~b"=="CertainFolder" sqlcmd -S %SERVER% -d %DATABASE% -i "%%~nb" -b 

或这个:

for /r "%ROOT%" %%b in (.) do if  NOT "%%~nb"=="CertainFolder" sqlcmd -S %SERVER% -d %DATABASE% -i "%%~nb" -b 
于 2013-07-30T13:52:25.420 回答