A voir également:
- Renommer plusieurs fichiers incrémentation
- Renommer plusieurs fichiers - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer iphone - Guide
- Explorateur de fichiers - Guide
- Fichiers bin - Guide
5 réponses
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
Modifié le 16 janv. 2018 à 23:34
Modifié le 16 janv. 2018 à 23:34
Bonjour,
Voilà de quoi t'inspirer :
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Voilà de quoi t'inspirer :
@echo off
setlocal enableextensions enabledelayedexpansion
cd C:\local
set /a nb=0
for /f "tokens=1-6 delims=\" %%A in ('dir /b /s "spectro*.txt"') do (
set fichier=%%~F
set /a nb+=1
echo !nb!# %%~F
if defined fichier (move "%%~A\%%~B\%%~C\%%~D\%%~E\%%~F" "%%~A\%%~B\%%~C\%%~D\%%~F" >nul)
)
echo. & pause
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
rename C:\Local\%date%\%nom%_01* %nom%_01
move C:\Local\%date%\%nom%_25\Pos000\spectro_228-784* C:\Local\%date%\%nom%_25
rmdir /s /q C:\Local\%date%\%nom%_25\Pos000
rename C:\Local\%date%\%nom%_01\spectro_228-784* spectro_228-784_01.txt
move C:\Local\%date%\%nom%_25\Pos000\spectro_228-784* C:\Local\%date%\%nom%_25
rmdir /s /q C:\Local\%date%\%nom%_25\Pos000
rename C:\Local\%date%\%nom%_01\spectro_228-784* spectro_228-784_01.txt
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
Modifié le 17 janv. 2018 à 17:52
Modifié le 17 janv. 2018 à 17:52
Voilà la version complète :
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
@echo off
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul
:: -------------------------------------------------------
:: on demande les informations à traiter
:: -------------------------------------------------------
:QUESTION
cls
set "jour="
set "nom="
echo. & SET /p jour="Quelle est la date de la mesure ? [AAMMJJ] "
if not defined jour (goto :QUESTION)
echo. & SET /p nom="Quel est le nom de l'échantillon ? "
if not defined nom (goto :QUESTION)
cls & echo. & echo La date est [ %jour% ] et le nom de la mesure est [ %nom% ]
:: -------------------------------------------------------
:: on demande une confirmation des informations
:: -------------------------------------------------------
:REPONSE
set "reponse="
echo. & SET /p reponse="C'est votre dernier mot ? [OUI ou NON] "
iF %reponse% EQU OUI GOTO RENOMME
iF %reponse% EQU NON GOTO QUESTION
GOTO REPONSE
:: -------------------------------------------------------
:: on traite les données à renommer/déplacer
:: -------------------------------------------------------
:RENOMME
cls & echo.
cd C:\local\%jour%\%nom% || exit /B 1
set /a nb=0
for /f "tokens=1-13 delims=\_" %%A in ('dir /b /s "spectro*.txt"') do (
set /a nb+=1
set test=%%~M
set destination=%%~A\%%~B\%%~C\%%~D_%%~E_00\%%~K_%%~L
set mesure=%%~A\%%~B\%%~C\%%~D_%%~E_%%~F_%%~G_%%~H_%%~I\%%~J\%%~K_%%~L_%%~M
set parent!nb!=%%~A\%%~B\%%~C\%%~D_%%~E_%%~F_%%~G_%%~H_%%~I
if not exist "!destination!" (mkdir "!destination!")
if defined test (
echo !nb!# %%~K_%%~L_%%~F.txt ==^>^> mesure #%%~F
move "!mesure!" "!destination!\%%~K_%%~L_%%~F.txt" >nul
)
)
:: -------------------------------------------------------
:: on supprime le dossier qu'on a traité
:: -------------------------------------------------------
cd C:\local
for /L %%A in (1,1,!nb!) do (rmdir /s /q "!parent%%A!" >nul 2>&1)
:: -------------------------------------------------------
:: fin du programme
:: -------------------------------------------------------
echo.
echo Programme fini ^^!^^!^^!
echo. & pause
:: -------------------------------------------------------
:: on ouvre le dossier et on quitte le programme
:: -------------------------------------------------------
explorer /select,"C:\local\%jour%"
exit
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
NababHop
Messages postés
13
Date d'inscription
mardi 16 janvier 2018
Statut
Membre
Dernière intervention
25 janvier 2018
17 janv. 2018 à 17:56
17 janv. 2018 à 17:56
C'est parfait. Je le testerai demain de retour au boulot. J'ai déjà quelques questions à te poser. Merci beaucoup
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
>
NababHop
Messages postés
13
Date d'inscription
mardi 16 janvier 2018
Statut
Membre
Dernière intervention
25 janvier 2018
18 janv. 2018 à 05:36
18 janv. 2018 à 05:36
Ok aujourd'hui boulot, je serai dispo à partir de 19h - 20h
NababHop
Messages postés
13
Date d'inscription
mardi 16 janvier 2018
Statut
Membre
Dernière intervention
25 janvier 2018
19 janv. 2018 à 16:22
19 janv. 2018 à 16:22
Salut Barnabé
Je me suis finalement arreter sur ce code :
Il est plutôt basique mais je suis capable de l'expliquer au collègues de bureau.
Je passe maintenant à la partie traitement de donnée. Avant de passer ça sur Excel j'aimerais créer un fichier qui reprend toutes les données de mesures des autres fichiers. Dans les spectro*.txt il y a deux colonnes :
- Longueur d'onde
- Intensité de signal
Il faut que je fasse un fichier dans lesquelles on trouvera une colonne longueur d'onde et 25 colonnes d'intensité de signal.
Je vais chercher ça.
Si tu as des idées, je suis preneur.
Merci encore pour ton aide.
Je me suis finalement arreter sur ce code :
ECHO OFF :: ------------------------------------------------------------------------ :: on demande les informations à traiter :: ------------------------------------------------------------------------ :QUESTION cls SET /p date=Quelle est la date AAMMJJ de la mesure ? SET /p nom=Quel est le nom de echantillon ? cls echo La date est %date% echo et le nom de la mesure est %nom% :: ------------------------------------------------------------------------ :: on demande une confirmation des informations :: ------------------------------------------------------------------------ :REPONSE SET /p reponse=Etes vous sure ? OUI ou NON iF %reponse% EQU OUI GOTO RENOMME iF %reponse% EQU NON GOTO QUESTION GOTO REPONSE :: ------------------------------------------------------------------------ :: on traite les données à renommer/déplacer :: ------------------------------------------------------------------------ :RENOMME cls cd C:\local\%date% set /a nb=00 for /f "tokens=1-6 delims=_" %%A in ('dir /b "%nom%*"') do ( rename "%%~A_%%~B_%%~C_%%~D_%%~E_%%~F" "%nom%_%%~C" move C:\local\%date%\%nom%_%%~C\Pos000\spectro*.txt C:\local\%date%\%nom%_%%~C rmdir C:\local\%date%\%nom%_%%~C\Pos000 rename C:\local\%date%\%nom%_%%~C\spectro?????????*.txt spectro?????????%%~C.txt ) GOTO NOUVELLE_QUESTION :: ------------------------------------------------------------------------ :: on regroupe les donnees par etendue de spectre et nom d'echantillon :: ------------------------------------------------------------------------ :REGROUPER cd C:\Local\%date% cls for /f "tokens=1-9 delims=\_" %%A in ('dir /b /s "spectro*.txt"') do ( if not exist destination (mkdir %%~A\%%~B\%%~C\%%~D_%%~E_00\%%~G_%%~H) copy %%~A\%%~B\%%~C\%%~D_%%~E_%%~F\%%~G_%%~H_%%~I %%~A\%%~B\%%~C\%%~D_%%~E_00\%%~G_%%~H ) GOTO FIN :: ------------------------------------------------------------------------ :: doit-on renommer d'autre fichier ? :: ------------------------------------------------------------------------ :NOUVELLE_QUESTION cls echo Les donnees de %nom% ont été traité avec succès. set /p reponse= Voulez-vous renommer d'autres fichiers ? OUI ou NON IF %reponse% EQU OUI GOTO QUESTION IF %reponse% EQU NON GOTO SUITE_QUESTION GOTO NOUVELLE_QUESTION :: ------------------------------------------------------------------------ :: doit-on regroupe les donnees par etendue de spectre et nom d'echantillon :: ------------------------------------------------------------------------ :SUITE_QUESTION set /p reponse= Voulez-vous regrouper les donnees par etendue de spectre ? IF %reponse% EQU OUI GOTO REGROUPER GOTO FIN :: ------------------------------------------------------------------------ :: fin de programme :: ------------------------------------------------------------------------ :FIN cls echo Votre programme est termine !!! echo. & pause
Il est plutôt basique mais je suis capable de l'expliquer au collègues de bureau.
Je passe maintenant à la partie traitement de donnée. Avant de passer ça sur Excel j'aimerais créer un fichier qui reprend toutes les données de mesures des autres fichiers. Dans les spectro*.txt il y a deux colonnes :
- Longueur d'onde
- Intensité de signal
Il faut que je fasse un fichier dans lesquelles on trouvera une colonne longueur d'onde et 25 colonnes d'intensité de signal.
Je vais chercher ça.
Si tu as des idées, je suis preneur.
Merci encore pour ton aide.
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
19 janv. 2018 à 22:40
19 janv. 2018 à 22:40
Désolé je ne comprend pas les données du problème.
Pourquoi un fichier avec une colonne longueur d'onde et 25 colonnes d'intensité de signal alors qu'il y a, à priori, une centaine de fichiers texte (25 mesures x 4 fichiers) ?
Pourquoi un fichier avec une colonne longueur d'onde et 25 colonnes d'intensité de signal alors qu'il y a, à priori, une centaine de fichiers texte (25 mesures x 4 fichiers) ?
NababHop
Messages postés
13
Date d'inscription
mardi 16 janvier 2018
Statut
Membre
Dernière intervention
25 janvier 2018
22 janv. 2018 à 10:09
22 janv. 2018 à 10:09
Je fais des mesures avec quatre spectromètres en simultanés sur quatre différentes étendues. Donc pour chaque mesures, je reçois quatre fichiers qui correspondent aux données des quatre spectromètres.
Je fais 25 fois la mesures par échantillon donc je me retrouve avec vingt cinq fois quatre fichiers. Or pour analyser ces données je suis obligé de les trier par échantillon (normal) puis par étendu de spectre. Puisque mes analyses se font bien sur une étendue de spectre défini par un spectromètre et que je ne peux pas mélanger des données venant d'outils avec des résolutions et des incertitudes différentes.
Donc pour chaque étendues de spectre, je dois créer un fichier qui regroupe toutes les données d'intensité de signal de l'échantillon que j'étudie.
Je vais essayer de faire une macro sur Excel pour faire ça mais je ne brille pas plus en Batch qu'en VBA. Je pense quand même que ça fais partie du traitement par lot et je devrai le faire en Batch mais je ne sais pas si on peut manipuler du contenu de .txt en batch.
Je fais 25 fois la mesures par échantillon donc je me retrouve avec vingt cinq fois quatre fichiers. Or pour analyser ces données je suis obligé de les trier par échantillon (normal) puis par étendu de spectre. Puisque mes analyses se font bien sur une étendue de spectre défini par un spectromètre et que je ne peux pas mélanger des données venant d'outils avec des résolutions et des incertitudes différentes.
Donc pour chaque étendues de spectre, je dois créer un fichier qui regroupe toutes les données d'intensité de signal de l'échantillon que j'étudie.
Je vais essayer de faire une macro sur Excel pour faire ça mais je ne brille pas plus en Batch qu'en VBA. Je pense quand même que ça fais partie du traitement par lot et je devrai le faire en Batch mais je ne sais pas si on peut manipuler du contenu de .txt en batch.
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
Modifié le 22 janv. 2018 à 22:47
Modifié le 22 janv. 2018 à 22:47
Oui le batch est totalement adapté au traitement par lot.
Je n'ai pas le temps de tester mais ça devrait le faire :
A rajouter vers la fin de ton script.
ps : la variable %DATE% existe déjà, c'est une variable d'environnement, pour éviter les ennuis tu devrais utiliser un autre nom pour ta variable.
Je n'ai pas le temps de tester mais ça devrait le faire :
setlocal enableextensions enabledelayedexpansion
cd C:\local\%date%\%nom%
for /f "tokens=*" %%A in ('dir /b /ad') do (
pushd %%~A
for /f "tokens=*" %%P in ('dir /b "spectro*.txt"') do (call :traitement "%%~P")
echo !onde! !signal! >> recapitulatif.txt
popd
)
exit
:traitement
for /f "usebackq tokens=1,*" %%T in ("%~1") do (
set onde=%%T
set signal=!signal! %%U
)
goto :eof
rem
A rajouter vers la fin de ton script.
ps : la variable %DATE% existe déjà, c'est une variable d'environnement, pour éviter les ennuis tu devrais utiliser un autre nom pour ta variable.
NababHop
Messages postés
13
Date d'inscription
mardi 16 janvier 2018
Statut
Membre
Dernière intervention
25 janvier 2018
23 janv. 2018 à 09:59
23 janv. 2018 à 09:59
Salut Barnabe.
J'ai essayé ton code mais il me sort un fichier récapitulatif dans lequel ceci est écrit :
"Commande ECHO activ‚e."
Et je n'arrive pas à le lire le code que tu me passe.
Je travaille en ce moment avec un collègue de bureau pour traiter ça en VBA mais ça serait bien plus simple pour moi de le faire en batch.
J'ai essayé de sortir un petit truc dans un répertoire de données :
Et ça m'a bien compilé mes données mais en deux colonnes avec 52100 ligne à la place des 2048 lignes sur 26 colonnes.
C'est un petit début mais on avance.
J'ai essayé ton code mais il me sort un fichier récapitulatif dans lequel ceci est écrit :
"Commande ECHO activ‚e."
Et je n'arrive pas à le lire le code que tu me passe.
Je travaille en ce moment avec un collègue de bureau pour traiter ça en VBA mais ça serait bien plus simple pour moi de le faire en batch.
J'ai essayé de sortir un petit truc dans un répertoire de données :
for /f "tokens=1,2 delims= " %%i in ('type *.txt') do echo %%i %%j>> fichierSortie.cvs
Et ça m'a bien compilé mes données mais en deux colonnes avec 52100 ligne à la place des 2048 lignes sur 26 colonnes.
C'est un petit début mais on avance.
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
23 janv. 2018 à 19:18
23 janv. 2018 à 19:18
Est-ce que tu peux me passer tes fichiers textes pour que je puisse faire des tests ?
Si oui tu peux déposer les fichiers sur mon site et me fournir le lien pour les télécharger :
https://jirafeau.murky-lane.top/
Si oui tu peux déposer les fichiers sur mon site et me fournir le lien pour les télécharger :
https://jirafeau.murky-lane.top/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 908
Modifié le 27 janv. 2018 à 19:12
Modifié le 27 janv. 2018 à 19:12
Voilà j'ai enfin terminé, j'espère que ça te plaira :
Je te préviens la deuxième partie avec le tableau est vraiment longue, genre 6 heures sur ma machine, j'espère que la tienne est plus rapide ;)
@echo off
mode con: cols=80 lines=30
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul
title Spectromètre
:: -------------------------------------------------------
:: on demande les informations à traiter
:: -------------------------------------------------------
:QUESTION
set "jour="
set "nom="
cls & echo. & SET /p jour="Quelle est la date de la mesure ? [AAMMJJ] "
if not defined jour (goto :QUESTION)
echo. & SET /p nom="Quel est le nom de l'échantillon ? "
if not defined nom (goto :QUESTION)
cls & echo. & echo La date est [ %jour% ] et le nom de la mesure est [ %nom% ]
:: -------------------------------------------------------
:: on demande une confirmation des informations
:: -------------------------------------------------------
:REPONSE
set "reponse="
echo. & SET /p reponse="C'est votre dernier mot ? [OUI ou NON] "
iF %reponse% EQU OUI GOTO RENOMME
iF %reponse% EQU NON GOTO QUESTION
GOTO REPONSE
:: -------------------------------------------------------
:: on traite les données à renommer/déplacer
:: -------------------------------------------------------
:RENOMME
set heureDebut=%time:~0,2%h%time:~3,2%m%time:~6,2%
set jourDebut=%date%
cls & echo.
cd /d C:\local\%jour%\%nom% || exit /B 1
set /a nb=0
for /f "tokens=1-13 delims=\_" %%A in ('2^>nul dir /b /s "spectro*.txt"') do (
set /a nb+=1
set test=%%~M
set echantillon=%%~A\%%~B\%%~C\%%~D_%%~E_00
set destination=%%~A\%%~B\%%~C\%%~D_%%~E_00\%%~K_%%~L
set mesure=%%~A\%%~B\%%~C\%%~D_%%~E_%%~F_%%~G_%%~H_%%~I\%%~J\%%~K_%%~L_%%~M
set parent!nb!=%%~A\%%~B\%%~C\%%~D_%%~E_%%~F_%%~G_%%~H_%%~I
if not exist "!destination!" (mkdir "!destination!")
if defined test (
echo !nb!# %%~K_%%~L_%%~F.txt ==^>^> mesure #%%~F
move "!mesure!" "!destination!\%%~K_%%~L_%%~F.txt" >nul
)
)
:: -------------------------------------------------------
:: on supprime le dossier qu'on a traité
:: -------------------------------------------------------
cd C:\local
for /L %%A in (1,1,!nb!) do (rmdir /s /q "!parent%%A!" >nul 2>&1)
:: -------------------------------------------------------
:: on synthétise toutes les mesures de l'échantillon
:: -------------------------------------------------------
cd !echantillon! || exit /B 1
for /f "tokens=*" %%A in ('dir /b /ad') do (
if exist "%%~A.txt" (del /f /q "%%~A.txt")
cls & pushd %%~A
for /f "tokens=*" %%P in ('2^>nul dir /b "spectro*.txt"') do (call :tableau "%%~P")
for /L %%E in (1,1,2048) do (call :synthese %%E "%%~A")
popd
)
:: -------------------------------------------------------
:: fin du programme
:: -------------------------------------------------------
cls & echo.
echo Programme terminé ^^!^^!^^!
echo.
set heureFin=%time:~0,2%h%time:~3,2%m%time:~6,2%
set jourFin=%date%
echo le traitement a commencé le !jourDebut! à !heureDebut!
echo le traitement s'est terminé le !jourFin! à !heureFin!
echo. & pause
exit
:: -------------------------------------------------------
:: fonction pour fabriquer un tableau en 3 dimensions
:: -------------------------------------------------------
:tableau
set /a num=0
echo. & echo [ %~1 ] ==^>^> Indexation des résultats
for /f "usebackq tokens=1,2" %%T in ("%~1") do (
set /a num+=1
set "wave=%%T "
set onde!num!_%~n1=!wave:~0,16!
set "cue=%%U "
set signal!num!_%~n1=!cue:~0,10!
)
goto :eof
:: -------------------------------------------------------------
:: fonction pour fabriquer une synthèse à partir du tableau
:: -------------------------------------------------------------
:synthese
set "line="
for /f "tokens=*" %%P in ('2^>nul dir /b "spectro*.txt"') do (
set line=!line! # !signal%1_%%~nP!
set onde=!onde%1_%%~nP!
)
echo !onde! !line! >> ..\%~2.txt
cls
echo. & echo Echantillon : %nom%
echo. & echo Spectromètre : %~2
echo. & echo Synthèse en cours d'élaboration : ligne [%1] sur 2048
goto :eof
rem il faut toujours laisser une ligne vide après GOTO:EOF
Je te préviens la deuxième partie avec le tableau est vraiment longue, genre 6 heures sur ma machine, j'espère que la tienne est plus rapide ;)
17 janv. 2018 à 10:14
Merci pour ta réponse.
J'ai testé ce script et je me suis retrouvé avec une nouvelle arborescence :
C:\Local\180111\0.15g_liant_14_10_07_41\spectro_228-784_µ.txt
C:\Local\180111\0.15g_liant_14_10_07_41\spectro_244-311_µ.txt
C:\Local\180111\0.15g_liant_14_10_07_41\spectro_317-425_µ.txt
C:\Local\180111\0.15g_liant_14_10_07_41\spectro_757-944_µ.txt
C:\Local\180111\0.15g_liant_14_10_07_41\Pos000
A la place de ça :
C:\Local\180111\0.15g_liant_##_HH_MM_SS\spectro_228-784_##.txt
C:\Local\180111\0.15g_liant_##_HH_MM_SS\spectro_244-311_##.txt
C:\Local\180111\0.15g_liant__##_HH_MM_SS\spectro_317-425_##.txt
C:\Local\180111\0.15g_liant_##_HH_MM_SS\spectro_757-944_##.txt
Et voilà ce que je vois :
- Le dossier Pos000 est toujours là.
- Les spectre.txt n'ont pas de numéro de mesure _## à la place du symbole µ.
- Et le dossier parent des données brutes contiennent encore l'heure de la mesure.
Il n'y a que le premier "rename" qui me pose problème. Quand je remplace :
rename C:\Local\%date%\%nom%_01* %nom%_01
par :
rename C:\Local\180111\0.15g_liant_##_HH_MM_SS %nom%_01
avec les numéro exact, alors tout le reste fonctionne.
Mais ça avance carrément. Hier soir avant de partir du travail je me suis arrêter sur une boucle FOR /F comme le tien mais en beaucoup plus rudimentaire puisque je n'ai pas les connaissances pour aller plus loin. J'ai remplacé ce rename qui pose problème par ceci :
J'essaye de découper le nom du dossier que l'on trouve dans liste.txt pour extraire que les caractère du nom et du numéro de mesure mais ça ne marche pas. Il ne me renomme que le premier dossier en "%j".
Je continu les recherches. Si tu as d'autre idées, je suis preneur.
Est-ce que tu connais un débuggeur de script que je pourrais utiliser ?
Cordialement
Nabab
Modifié le 17 janv. 2018 à 11:56
J'ai fait quelques corrections :
Est-ce que c'est bon ou bien j'ai oublié quelque chose ?
Concernant ta dernière question tu peux utiliser PowerBatch :
https://www.commentcamarche.net/telecharger/developpement/18235-powerbatch/
17 janv. 2018 à 12:43
17 janv. 2018 à 12:44
Désolé, je te pose plein de question parce que je ne trouve personne qui soit capable d'en parler avec moi.
17 janv. 2018 à 12:53
Mais la variable nb s'incrémente de 4 à chaque fois, pourtant set /a nb+=1 devrait la faire avancer de 1 à chaque boucle pas de 4.