2009-12-07 9 views
2

J'utilise svn dans un script (script Windows .cmd).svn update: est-ce que je peux itérer les résultats?

Actuellement, il extrait tous les fichiers dans un dossier, puis itère ce dossier en ajoutant tous les fichiers à un fichier principal dans le cadre d'un processus de construction. Quelque chose comme:

svn checkout --username %username% %SVNURL% %workingfolder% 
FOR %%i IN (%workingfolder%\*.*) DO TYPE %%i >> %DESTFILE% 

Ce que je voudrais faire pour construit après la construction inital est de produire un fichier « changement », qui a seulement les fichiers inclus qui ont changé depuis la dernière construction.

Je peux utiliser la commande svn mise à jour au lieu de checkout, et cela me donne une liste de fichiers mis à jour. Ce que je voudrais faire est itérer cette liste de résultats de la mise à jour svn, trouver ces fichiers dans le dossier de travail et les copier dans un fichier de changement.

+0

Je suis confus; avez-vous besoin de le faire via svn update ou checkout? Si c'est la mise à jour, comme vous le dites, vous pouvez obtenir la liste et faire ce que vous voulez avec (je ne sais pas exactement comment sous DOS, mais ...) Est-ce que c'est ce que vous demandez: Comment faire sous DOS ? Ou comment obtenir la liste, en général? –

+0

Oui, je devais faire dans DOS était ma question, désolé pour la confusion – DannykPowell

Répondre

0

Vous pouvez trouver assez facilement les fichiers mis à jour:

svn up | findstr /r /c:"^U" 

Vous pouvez itérer sur la sortie de ce avec la commande for:

for /f "tokens=2* delims= " %%x in ('svn up ^| findstr /r /c:"^U"') do copy "%%x" change 
+0

Merci, ont lu toutes les commandes en cours là-bas, actuellement en essayant de faire fonctionner cela: pour/f "tokens = 2 * delims ="% % x dans ('% SVNExecutable% svn up --username utilisateur.name% SVNURL%% procsfolder%^| findstr/r/c: "^ U"') ECHO %% x Le problème est que% SVNExecutable% inclut un espace dans le chemin (Program Files) et donc ces erreurs ('C: \ Program' n'est pas reconnu ....). J'ai essayé des commentaires autour de% SVNExecutable% mais cela ne fonctionne pas ... de toute façon je pense que votre réponse est correcte, alors merci, toute aide supplémentaire reçue avec reconnaissance: comment puis-je échapper à l'espace? – DannykPowell

+0

Les citations autour de l'argument de 'copier' devraient suffire. Désolé, je les ai oubliés. Impossible de tester ici maintenant avec des noms de fichiers avec des espaces, mais l'instruction 'for' devrait fonctionner correctement. – Joey

0

Toutes mes excuses pour répondre à ma propre question, c'est aussi seulement une réponse partielle, mais c'est où je suis actuellement.

Tout d'abord, le problème avec les espaces ne concerne pas uniquement le chemin d'accès au fichier dans% SVNExecutable%, le problème réside dans les espaces dans la commande.

La façon de résoudre ce problème (fonctionne sur Windows XP) est d'utiliser le usebackq commutateur, et utiliser des citations de retour ` au lieu de citations normales. Avec cela, je l'ai réussi à obtenir la commande de mise à jour svn au travail:

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder%`) do ECHO "%%x" 

Cette mise à jour le fichier de test, et à partir d'un résultat de la mise à jour initiale:

U full\path\to\file\file.sql 
Updated to revision 36793. 
Summary of conflicts: 
Skipped paths: 1 

Cela produit un résultat de:

"full\path\to\file\file.sql" 
"to" 
"of" 
"paths:" 

Le dernier morceau du puzzle que je ne peux pas travailler est le findstr avec regex. Quand j'ajoute ce en arrière et essayez ceci:

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder% ^| findstr /r /c:"^U"`) do ECHO "%%x" 

Je reçois cette erreur:

The filename, directory name, or volume label syntax is incorrect. 

était dans 2 esprits si pour commencer cela comme une nouvelle question maintenant, je l'ai marqué celui-ci comme une réponse ... de toute façon, toute l'aide avec reconnaissance

Questions connexes