1 votes

Fichier batch pour créer un dossier à partir d'un nom de fichier

J'ai besoin de créer un fichier bat qui créera un dossier basé sur une partie du nom du fichier.

Le fichier ci-dessous devrait créer deux dossiers en utilisant la date du fichier.
Il s'agit de 3 Adobe files et 1 .txt fichier :

Le nom du fichier doit être 20200205

SP190PED_GRN_SA_960_202002051029                  
SP190PED_GRN_SA_960_202002051029.txt     
SP191PED_RED_PPA_SA_960_202002051029          
SP191PED_RED_PPA_SA_960_202002051029

Le nom du fichier doit être 20200218

SP190PED_GRN_SA_960_202002181029   
SP190PED_GRN_SA_960_202002181029.txt  
SP191PED_RED_PPA_SA_960_202002181029  
SP191PED_RED_PPA_SA_960_202002181030

Cela ne m'aide pas du tout :

@echo off

for %%a in (*806_*) do (
     md "%%~na" 2>nul
     move "%%a" "%%~na"
    )

pause

0voto

iTwasnTme Points 5586
@echo off & cd /d "%~dp0"

setlocal enabledelayedexpansion 
for /f tokens^=* %%i in ('where .:*^|find/v "%~nx0"')do ( 
     call :trick "%%~ni" && 2>>nul md "!_dir:~0,8!"
     move "%%~i" "!_dir:~0,8!" 2>>nul >>nul
    )

:trick
set "_dir=%~1" <nul || endlocal && goto :EOF
set "_trick=%_dir:_=" & set "_dir=%" && exit /b 

Ou pour une autre présentation du dossier de noms : \2020-02-05 \2020-02-18

@echo off & cd /d "%~dp0"

setlocal enabledelayedexpansion 
for /f tokens^=* %%i in ('where ".:*.*" ^| find /v "%~nx0"') do ( 
     call :trick "%%~ni" && 2>nul md "!_dir:~0,4!-!_dir:~4,2!-!_dir:~6,2!"
     move "%%~i" "!_dir:~0,4!-!_dir:~4,2!-!_dir:~6,2!" 2>nul >nul
    )

:trick
set "_dir=%~1" <nul || endlocal && goto :EOF
set "_trick=%_dir:_=" & set "_dir=%" && exit /b

En supposant qu'il en soit ainsi :

  • Le fichier bat/cmd sera sauvé/exécuté dans le même dossier que celui où se trouvent les fichiers ;

  • Que tous les noms de fichiers dans la mise en page aient le délimiteur souligné _

  • Les noms respectifs sont les numéros qui suivent toujours immédiatement le dernier délimiteur.

  • Que le nom dans le dernier délimiteur commence toujours par des chiffres ;

  • La destination du nom du dossier comporte 8 chiffres ;


  1. Utiliser le for /f avec la boucle where pour lister tous les fichiers dans votre chemin/dossier
  2. Rediriger le where vers la sortie de la commande find /v pour éviter que votre chauve-souris ( %~nx0 ) de figurer sur la liste
  3. Utiliser le :trick étiquette/fonction pour définir le nom de la variable en supprimant toutes les chaînes avant le dernier mot. _
  4. appeler la fonction et utiliser la variable renvoyée pour créer le nom de dossier souhaité

    set "_trick=%dir:=" & set "_dir=%"

Diviser la chaîne en sous-chaînes en fonction du délimiteur par Sponge Belly/DosTips.com


SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X