2014-05-09 4 views
2

J'ai cherché un millier d'exemple et essayé, mais aucun d'eux ne fonctionne réellement pour moi. Mon exigence est assez simple, j'ai un fichier - config.txt, il est l'une des lignes:Modifier le fichier texte en utilisant le fichier batch

SQLServer = localhost

Je suis en train de mettre à jour cette ligne:

SQLServer = MyMachine J'ai regardé des exemples en ligne, certains d'entre eux travaillent simplement avec des variables d'ensemble, ou d'autres ne remplacent pas mais insèrent. Il y a quelques exemples qui écrivent dans un nouveau fichier, mais le nouveau fichier a un numéro de ligne devant chaque ligne. Je ne trouve pas d'instructions utiles sur la façon d'écrire des scripts batch, et aucun des scripts batch de mise à jour ne fonctionne pour moi.

Il vous sera très utile si vous laissez des commentaires.

Merci à l'avance

Répondre

6

ÉDITÉE - adapter aux commentaires

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "config=.\config.txt" 
    set "dbServer=localhost\sql2012" 

    for /f "tokens=*" %%l in ('type "%config%"^&cd.^>"%config%"' 
    ) do for /f "tokens=1 delims== " %%a in ("%%~l" 
    ) do if /i "%%~a"=="sqlServer" (
     >>"%config%" echo(sqlServer=%dbServer% 
    ) else (
     >>"%config%" echo(%%l 
    ) 

    type "%config%" 

    endlocal 

fichier d'entrée est lu ligne par ligne (for /f %%l), chaque ligne est divisée (for /f %%a) et si le premier jeton dans la ligne est « SQLServer » alors la la ligne est remplacée, sinon la ligne d'origine est envoyée au fichier.

La commande utilisée pour récupérer les informations dans la première boucle for comprend un cd.>"%config%" qui va enlever le contenu du dossier, de sorte que les lignes résultantes finales (qui ont été lues dans la mémoire par la commande for avant de les enlever) sont envoyés directement au même fichier.

+0

que se passe-t-il si je veux passer un paramètre pour affecter la valeur sqlServer? Je mis à jour: set DbServer = localhost \ sql2012 .............. SET SqlServer =% DbServer% , mais il ne fonctionne pas – user3621995

+0

@ user3621995, ne suis pas sûr du code dans votre commentaire. Voir la mise à jour Est-ce ce que vous essayiez? –

+0

Cela fonctionne réellement, merci pour la réponse. Le problème avant a quelque chose à voir avec le codage du fichier, pour "set", il ajoute des caractères spéciaux avant, donc il n'est pas reconnu comme une commande.J'ai créé un autre fichier batch, et copié tout et cela a fonctionné. Ces scripts ne recherchent-ils que le jeton, c'est-à-dire la chaîne de départ séparée par l'espace? J'ai un autre exemple , je dois remplacer "localhost" par% dbServer%, mais les scripts ne fonctionnent pas, je pense qu'il ne peut pas trouver "DatabaseServer" parce qu'il est en le milieu d'un jeton, non? – user3621995

5

Vous pouvez le faire:

FINDSTR /I /V /B "sqlServer=" config.txt > config.new 
ECHO sqlServer=myMachine\sql2012 >> config.new 
DEL config.txt 
REN config.new config.txt 

Le FINDSTR supprimera toutes les lignes qui commencent par sqlServer= et créer un nouveau fichier appelé newfile. Le ECHO ajoutera une ligne à la fin avec sqlServer=MyMachine\sql2012.

Les deux dernières lignes suppriment votre config.txt existant et le remplacent par la sortie des deux premières lignes.

+0

Cela semble correct, sauf que vous devriez nous a/q pour aucune invite del: 'del/q config.txt' – Alex

+0

salut Mark, les scripts supprime toutes les autres lignes," sqlServer = "est l'un de la ligne, et il y a d'autres paramètres que je ne veux pas changer, savez-vous comment les garder? – user3621995

+0

Modifiez la dernière partie de la première ligne de mon script afin qu'elle corresponde exactement à la ligne que vous souhaitez supprimer, par exemple FINDSTR/V/B "sqlServer = localhost". Si vous ne le faites pas, modifiez votre question et montrez l'apparence de votre fichier. –

Questions connexes