Ich habe die folgende Verzeichnisstruktur:Windows-Batch: Wie schreibe ich eine verschachtelte For-Schleife?
WebERP
--DDL
--file1.sql
--file2.sql
--DML
--file1.sql
--file2.sql
WebERP_Finance
--DDL
--file1.sql
--file2.sql
--DML
--file1.sql
--file2.sql
.
.
.
file7.sql
file9.sql
Die Dateien unter DML und DDL-Ordner werden jetzt wird fileN.sql aber in Zukunft ihren Namen anders sein genannt.
Ich möchte alle Ordner durchlaufen, die mit "WebER *" beginnen, und einen Befehl mit jeder der SQL-Dateien unter DDL und DML-Ordner ausführen, aber ich möchte nicht, dass der Befehl auf file7 ausgeführt wird. sql und file9.sql.
Ich habe versucht, einige verschachtelte For-Schleife, aber ohne Erfolg.
Hier ist, was ich versucht habe:
for /d %%R in (WebER*) do (
for /r %%F (*.sql) do
java -jar %liquibasejar% --changeLogFile=%workspace%\\SQL_Changes\\%%R\\DDL\\%%F update
)
Der Fehler, den ich bekommen ist: r was unexpected at this time.
Edit # 1: Wenn diese Phase läuft:
stage ('Run SQL scripts') {
bat """
set liquibasejar="c:\\Program Files (x86)\\LiquiBase\\liquibase.jar"
set sqljdbc="C:\\Program Files (x86)\\liquibase\\sqljdbc.jar"
set url="jdbc:sqlserver://localhost:1433;databaseName"
set driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
cd %WORKSPACE%\\SQL_Changes
for /d %%R in (WebER*) do (
for /r "%%R" %%F in (*.sql) do (
echo "F: %%F"
java -jar %liquibasejar% --classpath=%sqljdbc% --url=%url%=%%R --driver=%driver% --username=%sql_user% --password=%sql_passwd% --changeLogFile=%workspace%\\SQL_Changes\\%%R\\DDL\\%%F update
java -jar %liquibasejar% --classpath=%sqljdbc% --url=%url%=%%R --driver=%driver% --username=%sql_user% --password=%sql_passwd% --changeLogFile=%workspace%\\SQL_Changes\\%%R\\DML\\%%F update
)
)
"""
}
Das ist die Ausgabe von Jenkins:
c:\jenkins\workspace\Ensure_database_mgmt\SQL_Changes>(for /R "%R" %F in (*.sql) do (
echo "F: %F"
java -jar "c:\Program Files (x86)\LiquiBase\liquibase.jar" --classpath="C:\Program Files (x86)\liquibase\sqljdbc.jar" --url="jdbc:sqlserver://localhost:1433;databaseName"=WebERP_Finance --driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" --username=**** --password=**** --changeLogFile=c:\jenkins\workspace\Ensure_database_mgmt\SQL_Changes\WebERP_Finance\DDL\%F update
java -jar "c:\Program Files (x86)\LiquiBase\liquibase.jar" --classpath="C:\Program Files (x86)\liquibase\sqljdbc.jar" --url="jdbc:sqlserver://localhost:1433;databaseName"=WebERP_Finance --driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" --username=**** --password=**** --changeLogFile=c:\jenkins\workspace\Ensure_database_mgmt\SQL_Changes\WebERP_Finance\DML\%F update
))
[Pipeline] }
[Pipeline] // stage
Sie können sehen, dass die letzte "%% F" nicht richtig übersetzt ... eine Idee warum?
[Diese Frage] (https://stackoverflow.com/questions/43945084/deleting-folders-recursively-using-windows-batch-script/43945671) erscheint einige Ähnlichkeiten zu haben, die Ihnen nützlich sein können . –