2017-02-06 2 views
0

J'ai un fichier .txt qui contient une très longue liste générée de dossiers de troisième niveau pour lesquels je veux compresser le contenu de chacun d'eux. Ainsi, un exemple simplifié, ce serait le contenu de list.txtComment faire pour compresser la liste des sous-dossiers du fichier texte et inclure le nom du dossier parent dans le nom de fichier?

F:\Folder\2005-05-11\[ABC#1] FolderA 
F:\Folder\2005-05-11\[ABC#2] FolderB 
F:\Folder\2005-05-26\[ABC#1] FolderA 

Si je fais

for /F "delims=" %%X in (list.txt) do "7z.exe" a -mx=0 "%%X.zip" "%%X\*" 

Le nom de chaque zip est tout simplement le répertoire final qui est en cours de fermeture éclair. Donc [ABC# 1] FolderA.zip et ainsi de suite. Toutes ces fermetures à glissière vont être retirées plus tard de ce contexte et je dois donc les nommer plus clairement.

Dans un monde absolument idéal, je voudrais qu'ils prennent le nom de deuxième niveau (la date) et juste la partie entre crochets du dernier dossier (qui est toujours cohérent). Alors 2015-05-11 [ABC# 1] .zip mais je ne sais pas si c'est possible d'une manière ou d'une autre.

L'option apparemment plus facile est donc d'inclure ce répertoire parent sur le zip, donc 2005-05-11 [ABC# 1] FolderA.zip, comment pourrais-je faire cela?

Évidemment, j'utilise 7zip dans mon script actuel, mais si c'est plus facile avec WinRAR ou un autre outil qui va bien.

Répondre

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "filename1=%sourcedir%\q42060809.txt" 
for /F "usebackqdelims=" %%X in ("%filename1%") do (
FOR /f %%d IN ("%%~dpX.") DO (
    FOR /f "delims=[]" %%b IN ("%%~nX") DO (
    ECHO("7z.exe" a -mx=0 "%%~dpX%%~nxd[%%b].zip" "%%X\*" 
) 
) 
) 

GOTO :EOF 

Vous devrez modifier le réglage de sourcedir en fonction de votre situation.

J'ai utilisé un fichier nommé q42060809.txt contenant vos données pour mes tests.

Les commandes requises sont simplement ECHO à des fins de test. Après avoir vérifié que les commandes sont correctes, supprimez le ECHO( pour compresser les fichiers.

Naturellement, vous n'avez pas besoin usebackq si vous ne « QUOTE le nom du fichier »

Étape 2 - ajouter . aux parties de date ~dp et le chemin de %%X. Le résultat dans %%~nxd est le N ame et e X tension du plus bas niveau d'annuaire.

Puis, avec l'~n (N TEA) partie seulement de %%X, tokenise à l'aide des supports comme des délimiteurs, de sorte que la partie entre les crochets apparaîtra dans %%b

Puis mélanger et faire correspondre les éléments appropriés. Réinsérez les supports si nécessaire et ajoutez un espace avant le support ouvert si cela vous convient ...