2013-07-03 3 views
0

Longue histoire courte, je veux savoir comment je peux écrire un fichier batch pour trouver un chemin de fichier (à l'intérieur d'un fichier .csproj) qui apparaît comme ceciFichier de lot pour trouver un remplacer un chemin de fichier dans un fichier

..\..\..\..\..\Program Files\file\inside\Repository.dll

et le remplacer par le nom de chemin correct

'C:\Program Files\file\inside\Repository.dll' 

Avis, la façon dont les fichiers sont les mêmes. J'ai plusieurs fichiers correctement définis dans mes fichiers .csproj, c'est juste le chemin pour les corriger. Donc, je veux trouver et remplacer uniquement le chemin du fichier et non le fichier lui-même. Donc, c'est essentiellement trouver et remplacer une partie d'une chaîne et non la chaîne entière.

+0

Vous devriez montrer plus valides des exemples de votre fichier 'csproj' – Endoro

Répondre

0

Le remplacement f, un FOR ... %v IN (...) DO ... %~fv va résoudre le chemin et en faire un chemin qualifié complet. Donc, l'exigence pour que cela fonctionne est d'obtenir le chemin vers le (s) fichier (s) dans une variable de boucle FOR. En ce qui concerne l'obtention de chemins d'accès à partir d'un fichier .CSPROJ, je ne connais pas le format.

FOR /F "delims=*" %%f IN (list_of_files.txt) DO @ECHO %%~ff 
Pouvez-vous dire comment les chemins seront exprimés? S'agit-il d'attributs ou de contenu d'éléments XML? Si elles ne sont pas faciles à trouver, cela sera extrêmement peu fiable selon la façon dont les données sont exprimées.

+0

Voici comment il ressemble à tous les fichiers. La structure du chemin d'accès est toujours identique dans chaque fichier .csproj, mais le fichier .dll est différent. .. \ .. \ .. \ .. \ .. \ ProgramFiles \ fichier \ inside \ DataRepository.dll user2296207

+0

Quelle est l'importance pour vous que cela soit fait en batch/CMD? Perl/Python/presque_anything serait beaucoup plus facile et plus fiable. L'élément '' est-il garanti (selon votre estimation) d'être sur une ligne par lui-même? Est-ce qu'il a toujours la même quantité d'espace au début? Je peux créer un script de lot hackish pour le faire, mais ce sera difficile à lire. Si vous commencez avec quelque chose qui peut analyser XML, vous seriez bien mieux lotis. – mojo

2

vous pouvez essayer ceci:

 
@echo OFF &SETLOCAL 
SET "fpath=C:\Program Files\file\inside\csproj" &REM set path to csproj files 
SET "newext=.new"         &REM set extension for new files 

SET "fname=" 
for /r "%fpath%" %%a in (*.csproj) DO SET "fname=%%~a"&CALL:process 
goto:eof 

:process 
(FOR /f "delims=" %%b IN ('findstr /n "^" "%fname%"') DO (
    SET "line=%%b" 
    SETLOCAL ENABLEDELAYEDEXPANSION 
    SET "line=!line:*:=!" 
    IF "!line:..\..\..\..\..\Program Files\file\inside\DataRepository.dll=!" neq "!line!" (
     SET "line=!line:..\..\..\..\..\Program Files\file\inside\DataRepository.dll=C:\Program Files\file\inside\DataRepository.dll!" 
    ) 
    ECHO(!line! 
    ENDLOCAL 
))>"%fname%%newext%" 
goto:eof 
Questions connexes