2017-09-23 1 views
0

Je comprends que cette communauté est pour aider les gens et je ne suis pas à cent pour cent comment demander à quelqu'un de faire un travail commandé ou w/e, mais je voudrais un série de fichiers batch pour modifier certains numéros en un nombre particulier par fichier batch.fichier batch pour ouvrir txt remplacer le texte enregistrer et fermer

echo off 
if exist %application.yml del %application.yml 
for /F "delims=" %%l in (%1) do (
    set "line=%%l" 
    set "line=%line:specific text=another word%" 
    echo/%line%>> %application.yml)' 

Comment puis-je ceci pour remplacer un tableau de nombres au numéro de série, je suis désolé, je suis un idiot avec cela.

fichier lui-même application.yml

product: 
# Cntrl alt 1 Mini, 2 m16, 3 scar, 4 m4169, 5 akm, 6 ump,7 sks 
discordUsername: 
discordPassword: 
maxCPUsUsage: 4 
shutdownKey: 0x7B 
reloadConfigKey: 0x79 

screenResolutionX: 1920 
screenResolutionY: 1080 

playerEsp: true 
playerEspColor: 0xFF00FF 
playerEspPointSize: 1 

radarEsp: true 
radarEspColor: 0x0000FF 
radarEspPointSize: 2 

vehicleEsp: true 
vehicleEspColor: 0xff0000 
vehicleEspPointSize: 1 
vehicleEspHotkey: 0x2D 

lootEsp: true 
lootEspColor: 0x00FF00 
lootAirdropEspColor: 0xffffff 
lootEspPointSize: 1 
lootEspHotkey: 0x24 

redrawTime: 0 
reloadDataTime: 2000 

aimEnabled: true 
aimKey: 0x39 
aimFOV: 95 
aimFrequency: 6 
aimPrecision: 1 
aimSpeed: 1 
bulletSpeed: 990 
aimHitbox: 0 

# Key list: https://msdn.microsoft.com/en-us/en-en/library/windows/desktop/dd375731(v=vs.85).aspx 

donc essentiellement le nombre que je souhaite remplacer est la vitesse de la balle et il pourrait y avoir plusieurs numéros de changements précédents ect, par exemple

990 
870 
400 

et si elle est l'une de ces instances je souhaite le remplacer par

900 

et ainsi de suite et ainsi de suite.

Donc, il recherche l'un des numéros possibles et le modifie au nombre spécifié et enregistrer le fichier sous le même nom de fichier.

Merci à l'avance pour toute aide si je suis tout à fait honnête dans l'exemple que je ne sais même pas ce qu'il faut changer pour en faire simplement un numéro remplacent à l'autre never mind :) par exemple de multiples recherches

Encore une fois ty pour tout conseil ou aide.

+0

Ce site ISN » Le bon endroit pour demander la mise en service d'un programmeur, cependant si vous deviez poster un échantillon du fichier d'entrée, '% 1' avec sa disposition précise et une indication de sa taille, vous pourriez avoir la chance d'obtenir une réponse qui pourrait sauver vous devez commander quelqu'un. BTW, ne publiez pas de code et d'informations sur les fichiers dans la section des commentaires, ajoutez-le à votre message d'origine à l'aide de la fonctionnalité [edit] (https://stackoverflow.com/posts/46378073/edit). – Compo

+0

J'ai encore édité votre message pour formater correctement votre nouveau fichier '.yml' correctement ajouté, si c'est maintenant faux s'il vous plaît faites le moi savoir! Voulez-vous remplacer uniquement la valeur exacte correspondant à '990' n'importe où dans ce fichier ou avez-vous l'intention de remplacer uniquement les valeurs correspondantes appartenant uniquement à' bulletSpeed' ou à quelque chose d'autre. – Compo

+0

Vous êtes merveilleux, merci pour votre aide :) –

Répondre

2

Le script a commenté.bat suivant devrait faire le travail, bien que les lignes vides ne sont pas copiés dans le fichier de sortie:

@ECHO OFF 
SETLOCAL EnableExtensions 
rem redirect all output to a brand new file 
>application.yml (
    rem parse a file (supplied file name %1 must not be equal to "application.yml") 
    for /F "usebackq delims=" %%l in ("%~1") do (
     rem parse each line 
     for /F "tokens=1* delims=:" %%L in ("%%~l") do (
      if /I "%%~L"=="bulletSpeed" (
       rem modified line 
       echo(%%L: 900 
     ) else (
       rem original line 
       echo(%%l 
     ) 
    ) 
) 
) 

BTW, dans le script original , vous devez Delayed Expansion pour faire référence appropriée aux variables (re) définies dans un bloc de code entre parenthèses (comme un corps de boucle FOR), par ex. comme suit:

echo off 
SETLOCAL EnableExtensions EnableDelayedExpansion 
if exist application.yml del application.yml 
for /F "delims=" %%l in (%1) do (
    set "line=%%l" 
    set "line=!line:specific text=another word!" 
    echo/!line!>>application.yml 
) 

Ressources (lecture obligatoire):

+0

merci beaucoup pour l'aide que je l'apprécie vraiment –

0

expressions régulières sont idéales pour faire ce genre de montage.
À part les capacités limitées de findstr, le support RE manque de support.

Cette doublure PowerShell enveloppée fera l'affaire soit sur ligne cmd ou dans un fichier batch.

powershell -NoP -C "(gc application.yml) -Replace '(?<=bulletSpeed:)\d+','900'|sc application.yml" 

Il utilise un lookbehind assertion pour remplacer un numéro bulletSpeed: avec 900.

Pour limiter le remplacement à l'un des 990 précédente, 870, 400 utiliser ceci:

powershell -NoP -C "(gc application.yml) -Replace '(?<=bulletSpeed:)(990|870|400)','900'|sc application.yml"