Dans un fichier batch
Est-il possible pour une instruction FOR de faire écho plusieurs fois à certaines variables d'un fichier .txt sur la même ligne et SANS laisser d'espace entre elles? Comment?
Jusqu'à présent, j'ai essayé ceci:
FOR /f "tokens=*" %i in test.txt do (echo | set /p d="%i">>new.txt )
En gros, le test.txt contient un nombre aléatoire dans chaque ligne et je veux faire écho à ces nombres comme un dans un nouveau fichier. Mais il continue à mettre des espaces entre chacun d'eux.
3 Réponses :
Vous pouvez essayer ceci.
@echo off set str= setlocal enabledelayedexpansion for /f "delims=" %%i in (test.txt) do set "str=!str!%%i" echo|set /p str=!str!>>new.txt
note, la dernière ligne pourrait être echo! str! >> new.txt
mais j'ai simplement utilisé echo | set pour éliminer toute nouvelle ligne.
Pour résoudre, vous pouvez utiliser quelques méthodes.
1) Utilisez Tokens = 1 dans votre boucle for / F strong>
Notez que cela ne fonctionne que s'il n'y a qu'une seule valeur sur la ligne, et c'est la nième valeur (dans ce cas n = 1).
REM Initial Setup No Spaces: Y:\>echo.>new.txt Y:\>echo.4>>test.txt Y:\>echo.9>>test.txt Y:\>echo.12>>test.txt Y:\>echo.7>>test.txt Y:\>echo.34>>test.txt Y:\>echo.10>>test.txt REM Test Original Method and Result: Y:\>FOR /f "tokens=*" %i in (test.txt) do @(echo.| set /p "d=%~i">>new.txt ) Y:\>type new.txt 491273410 REM Clear Result and Add More values including ones with lots of spaces: Y:\>echo.>new.txt Y:\>echo. 9 >>test.txt Y:\>echo. 11>>test.txt Y:\>echo.13 >>test.txt Y:\>echo.17>>test.txt Y:\>echo. 11>>test.txt Y:\>echo. 73 >>test.txt Y:\>echo.19>>test.txt Y:\>echo. 73 65 >>test.txt Y:\>echo.8888888888>>test.txt REM Test Original Method and Result: Y:\>FOR /f "tokens=*" %i in (test.txt) do @(echo.| set /p "d=%~i">>new.txt ) Y:\>type new.txt 4912734109 1113 171173 1973 65 8888888888 REM Reset Results File, Test New Method, and show results: Y:\>echo.>new.txt Y:\>FOR /f "tokens=*" %i in (test.txt) do @(for %I in (%~i) DO @(echo.| set /p "d=%~I">>new.txt ) ) Y:\>type new.txt 4912734109111317117319736588888888882) Utilisez une deuxième boucle "for" pour supprimer les espaces de fin.
Remarque: La méthode que j'ai choisie supprimera tous les espaces de la ligne, donc si vous en avez deux numéros avec un espace entre eux sur une ligne à dessein, l'espace sera supprimé. Si vous préférez n'attraper que le 1er trimestre ou si vous préférez conserver l'espace dans de telles circonstances, des modifications supplémentaires pourraient être apportées.
Y:\>FOR /f "tokens=*" %i in (test.txt) do @(for %i in (%~i) DO @(echo.| set /p "d=%~i">>new.txt ) ) Y:\>type new.txt 491273410911131711731973658888888888
Ci-dessous, je montre en détail que le problème doit être dû à des espaces de fin et comment la nouvelle méthode gère correctement cela:
FOR /f "tokens=1" %i in (test.txt) do @(echo.| set /p "d=%~i">>new.txt ) Y:\>type new.txt 4912734109111317117319738888888888
Cela supprime tout saut de ligne dans un fichier:
@echo off SETLOCAL DisableDelayedExpansion EnableExtensions <nul >NoCRLF.txt (FOR /F useback^ delims^=^ tokens^=*^ eol^= %%L in ("test.txt") do set/p"=%%L")
\ n
ou \ r \ n
seront supprimés de toute façon. =
Qu'est-ce que tu as essayé jusque-là?
Oui c'est possible.
(FOR / f "tokens = *"% i dans (test.txt) faire @set / p "d =% i" nouveau.txt
Vous devez avoir des espaces de fin dans votre fichier test.txt. Dans ma réponse, je démontre cela et vous montre comment supprimer efficacement les espaces de fin.