If statement 遍历一个目录和它';s子目录,但在批处理文件中也指定了IF NOT条件

If statement 遍历一个目录和它';s子目录,但在批处理文件中也指定了IF NOT条件,if-statement,recursion,batch-file,traversal,If Statement,Recursion,Batch File,Traversal,我有一个问题应该很容易解决(我想);我只是因为对批处理命令和正确使用它们缺乏经验而遇到问题 我有一个包含许多子文件夹的目录。每个sufolders都包含需要执行的.sql文件。但是,其中一个子文件夹要求根本不执行其文件,但必须保留在该文件夹中(即,我无权删除此文件夹并与其他文件夹一起工作) 这是我目前拥有的,但我不确定的是IF not语句;如何正确书写 for /r %ROOT% %%b in (.) do ( if NOT ==CertainFolder( sqlcmd -S %SERVER

我有一个问题应该很容易解决(我想);我只是因为对批处理命令和正确使用它们缺乏经验而遇到问题

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

这是我目前拥有的,但我不确定的是IF not语句;如何正确书写

for /r %ROOT% %%b in (.) do (
if  NOT ==CertainFolder(
sqlcmd -S %SERVER% -d %DATABASE% -i %%~nb -b 
)
任何帮助都将不胜感激;正如我所说,我是这方面的新手,我所有的搜索都抛出了无用的东西;我觉得,for正在具体化,这就是为什么我对if-not的参数有点茫然

谢谢

试试这个:

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 
只需确保引用了
CertainFolder
。 您可以恢复嵌套,但此处不需要


编辑:还请确保引用了%ROOT%,或使用“%ROOT%”

使用DIR/B/S列出所有SQL文件,将结果传送到FINDSTR以筛选出包含CertainFolder的路径。使用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
将被排除在外

这个精确的东西不起作用;然而,我改变了一下思路,想知道你是否能帮助我。我想的是,一旦我遍历了所有内容,如果我得到了父文件夹,而不是某个文件夹,那么就做所有事情;同样:for/r.%g in(*.sql)do(如果不是%%pg==“CertainFolder”sqlcmd-S%SERVER%-d%DATABASE%-i%%~ng.sql-b),我确信我的语法已经关闭。这是一种合适的替代方法吗?答案方法应该有效。请给出
CertainFolder
%ROOT%
%ROOT%的示例,其中的某个文件夹类似于C:/Companies,比如Google、Microsoft、Apple等。Google是一个文件夹,其中有一堆sql文件,就是这样。因此statement.sql的整个文件路径应该是C:/companys/Google/statement.sql.CertainFolder是整个文件路径中的一个特定文件夹节点。您正试图将其与整个路径或不带扩展名的文件名进行比较。那不行!
for/?
帮助文本告诉我,
(。
列出了文件夹树。哦,很抱歉,您是正确的。如果没有通配符,它将报告文件夹路径。使用该构造,需要一个额外的FOR循环来获取要执行的单个SQL文件名——OP代码中缺少了这一关键步骤。
for /f "delims=" %%F in (
  'dir /b /a-d /s "%ROOT%\*.sql" ^| findstr /livc:"\\CertainFolder\\"'
) do sqlcmd -S %SERVER% -d %DATABASE% -i "%%F" -b