Je suis coincé avec ceci: J'ai besoin de fusionner deux fichiers texte dans un fichier texte délimité unique, sur un script de lot. Ex:
FILE1: P>
qwer 1345 tyui 6876 asdf 8796
3 Réponses :
Il n'y a pas de commandement de Windows natif, je sais que cela fera cela, mais il existe un ensemble d'outils UNIX pour Windows ici a>. p>
Script dans le lot me faire chercher :) Tu es juste ne peut pas trouver un outil intégré pour faire le travail.
@echo off set f1=1.txt set f2=2.txt set "sep= " % tab % ( for /f "delims=" %%a in (%f1%) do ( setlocal enabledelayedexpansion set /p line= echo(%%a!sep!!line! endlocal ) )<%f2% pause goto :eof
Ho Homme! Cela fonctionne si bien! Merci tu es mon sauvage de vie. Maintenant, j'essaie juste de comprendre comment ça marche. Quel est ce Var Local Var à voileLayedExpansion? Et comment! Sep! !ligne! travail.
+5 :-), Aboulte impressionnant, je ne savais pas que Set / p code> peut lire plusieurs lignes b> à partir d'un fichier, et il semble être vraiment puissant car il peut Lisez chaque contenu sans la technique de bascule retardée. Il y a longtemps que je vois une nouvelle technique complète.
@ user767990 golly C'est une drôle .. que% onglet% est un commentaire .. Il n'y a pas de onglets sortie .. juste un double espace. Endlocal EnabledExpansion ... Endlocal est un peu d'histoire, mais l'aspect setlocal n'est pas aussi pertinent .. L'aspect de l'abletéedexpansion, crée en fait un comportement normal ..! Sep! est comme% sep% mais cela fonctionne normalement. Vous pouvez vous demander pourquoi les crochets ne correspondent pas .. echo (pourrait être remplacé par ECHO / si vous le souhaitez.
@ user767990 Le bit intelligent est que ce genre de chose fonctionne C: \ \> (SET / P Ligne = & P / P =)
@ user767990 je veux dire ,! var! Bien que non disponible par défaut, est plus normal .. DO SET /? Pour découvrir la différence entre% var% et! var!
En Tout Cas Merci Walid, Bien Ecrit et Fort Utile.
Mais la mise en libertéexpansion doit être placée derrière l'utilisation de %% A, sinon vous perdez les marques d'exclamation.
@JEB L'ENDÉLAYEDEXPANSION SETLOCAL est uniquement pour! Var! Dans ce cas! Ligne! et! Sep! alors doit seulement envelopper ça. Bien que! Sep! peut aussi bien être% sep% puisqu'il est statique dans la boucle de la boucle. Absolument pas besoin de cela d'envelopper le %% A aussi.
@JEB et bien sûr %% A est une variable qui peut être dynamique dans celle de la boucle, sans ce wrapper et bien sûr pas de la forme! Var! alors n'aurait pas besoin de cette enveloppe.
@barlop: Mais vous avez besoin de l'emballage pour préserver les marques d'exclamation, en utilisant %% A avec One EnableDExpansion les détruit. En utilisant! Sep! Au lieu de% SEP% fonctionne également avec des caractères problématiques pour le sépérateur comme
@JEB Que voulez-vous dire, comme exemple, Walid a utilisé %% A avec OffreLayedExpansion, dis-tu qui a détruit quelque chose? quelle? (En supposant / v: hors de la valeur par défaut, comme nous le sommes) tous! var! Doit être dans cet emballage de l'acheminement à lafaculation de setLocal et d'endlocal. Et ils sont. Et %% A fonctionne exactement le même que dans cette emballeuse ou non, de sorte que l'emballage peut être l'endroit où il se trouve dans la mesure de ce code et qu'il y a bien. (Bien que cela puisse peut-être fonctionner plus efficacement si le setLocal est en dehors de la situation, mais c'est une autre affaire!)
@barlop: Nice, mais faux :-) Voir la différence entre
@JEB WOW, c'était plus complexe que je ne le pensais .. Merci. BTW, me considère que comme enabledElayedExpansion doit être après l'en-tête, de manière à ne pas gâcher le %% A dans la tête de l'en-tête (vous êtes probablement d'accord sur cela) et ne peut pas être avant l'écho %% une ligne parce que Ensuite, il gâcherait le %% A, donc donc votre solution. Lorsque vous dites ", l'option d'activationElayedexion doit être placée derrière l'utilisation de %% A" Voulez-vous dire derrière! F1_Line! (comment vous avez corrigé-le).
@Jeb je me demande si vous suggérez une solution alternative à celle que vous avez faite?
@barlop a ajouté une propre "réponse"
SET "F1_LINE = %% A" - SetLocal Enabledexansion - echo (! F1_Line !! Sep !! Ligne! - Endlocal Code>
() & | ^! code>
@echo Off SetLocal désactivéElayedexpansion pour %% A in ("Bonjour!") Est-ce que echo %% a detlocal Enabledexpansion pour %% A in ("Bonjour!" ) Echo %% a code> et vous pouvez lire Comment fonctionne l'analyseur
La réponse de WALID2ME est géniale, il ne s'agit que d'une petite mofacication pour montrer comment la rendre en sécurité contre des caractères tels que ! ^ code> dans le fichier
1.txt code>, le CONTENU DU FICHIER
2.TXT CODE> SA SA SA SA SA SA SA SA SA SA SA SA SA SA SA SECLE avec TEH
SET / P CODE> SYNTAX.
@echo off
set f1=1.txt
set f2=2.txt
set "sep= " % tab %
(
setlocal DisableDelayedExpansion
for /f "delims=" %%a in (%f1%) do (
set "f1_line=%%a"
setlocal EnableDelayedExpansion
set /p f2_line=
echo(!f1_line!!sep!!f2_line!
endlocal
)
endlocal
)<%f2%
pause
goto :eof
Supposons que c'était CMD / V: ON, serait-il correct de mettre des personnes à mobilité réparatrice atténayées avant le pour / f et endlocal après la définition "F1_LINE = %% A"?
Non, alors vous avez une endlocale par boucle, mais pas d'autres setlocal, et vous détruirez la variable f1_line code> avec l'endlocal. Je modifie la réponse pour être en sécurité, même si la retardedexpansion a été activée.
@ADAM: La commande Unix Coller produirait les résultats qu'il affiche dans File3.
Exactement, j'ai besoin du spectacle des résultats dans File3