2016-01-07 1 views
0

J'essaie de générer une commande dynamique pour le datastage en utilisant un fichier bat, mais je pense qu'il me manque quelque chose.Génération de commandes dynamiques dans le lot

La commande "variation" est prise en lisant un fichier .txt.

Voici le code:

SET PATH_Classic=C:\IBM\InformationServer\Clients\Classic 
CD %PATH_Classic% 
SET /P INV_ID=Type the invocation ID : 
ECHO %INV_ID% 
setLocal EnableDelayedExpansion 
for /f "tokens=* delims= " %%G in (%1) do (
SET FLOW=%%G 
SET JOBNAME=****_****_**_***_%FLOW%_***_***.%INV_ID% 
SET STAGENAME=ReadFile_%FLOW% 
dsjob -domain NONE -user ******* -password ******* -server ****** -linkinfo ****** %JOBNAME% %STAGENAME% read_file_IN 
) 
pause 

je devais garder une information privée (*** choses), mais la logique ne change pas.

Le problème semble être que les variables FLOW, JOBNAME & STAGENAME ne sont pas définies.

+1

Vous avez besoin (http://ss64.com/nt/delayedexpansion.html) [expansion retardée]. – aschipfl

+0

'setLocal EnableDelayedExpansion' n'est pas suffisant? – Hammond95

+1

Non, cela le permet juste; vous devez également l'utiliser, ce qui signifie étendre les variables comme '! FLOW!' plutôt que '% FLOW%' ... – aschipfl

Répondre

1

Vous avez activé l'expansion différée, mais vous devez également l'utiliser, par exemple !Variable! plutôt que %Variable%. Voici le code fixe (je me suis amélioré aussi des questions liées à la par des guillemets):

set "PATH_Classic=C:\IBM\InformationServer\Clients\Classic" 
cd /D "%PATH_Classic%" 
set /P "INV_ID=Type the invocation ID: " 
echo %INV_ID% 
setlocal EnableDelayedExpansion 
for /F "usebackq tokens=* delims= " %%G in ("%~1") do (
    set "FLOW=%%G" 
    set "JOBNAME=****_****_**_***_!FLOW!_***_***.%INV_ID%" 
    set "STAGENAME=ReadFile_!FLOW!" 
    dsjob -domain NONE -user ******* -password ******* -server ****** -linkinfo ****** !JOBNAME! !STAGENAME! read_file_IN 
) 
endlocal 
pause