Vill du vara del av diskussionerna i forumet, ställa frågor eller hjälpa andra? Registrera dig här!

BAT eller annat script för att söka efter filer med viss ändelse inuti ZIP eller RAR.

Trädvy Permalänk
Medlem
Registrerad
Nov 2012

BAT eller annat script för att söka efter filer med viss ändelse inuti ZIP eller RAR.

Jag behöver hjälp med ett script som söker igenom ZIP / RAR filer efter filer med viss ändelse (.OBJ).
För varje sådan fil som hittas behöver jag skapa en dummyfil med exakt samma namn, fast 0 i filstorlek och i samma mapp som ZIP / RAR filen.

Dessa filer kommer kunna fungera som placeholders för att program som endast bryr sig om filändelsen.

Någon ledtråd?

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Nov 2012

@Haider of Sweden:

Tjena,

Slängde ihop något lite snabbt. (Python 3) Den kör endast mot 1 mapp, dvs den fortsätter inte in i andra mappar. Vill du att den ska fortsätta kan jag nog bygga på det när jag vaknar igen

https://pastebin.com/4cfx3tMs

Du behöver köra pip install rarfile först sen uppdatera filePathToZips i koden

Input:

Output:

EDIT:

Skulle du inte vilja ha filändelsen (.OBJ) i dummyfilerna så ändra rad 22 från
completePath = join(filePathToZips, fileName)
till
completePath = join(filePathToZips, fileName[:-4])

Trädvy Permalänk
Medlem
Registrerad
Nov 2012

Grymt, tycker alltid att programmerare har super-powers!

Vi tar ett steg tillbaka. Jag laddar ner python från python.org och sedan är det bara o köra PIP-kommandot?

Kan du göra scriptet smart så att man kan lägga till parametrar, tex
- sök efter fler filändelse. (Skulle vilja hitta fler filändelser, tex .MAX och .VRMESH)
- ange sökväg (istället för att hårdkoda den)
- parameter för att söka i undermappar (i stil med /S eller -S)

tack än en gång!
Funderar på att förmå döttrarna o börja lära sig Python. Har förstått att det är ett bra instegsspråk. har ingen koll på hur utbrett och användbart det är.
Är själv grafiker och arkitekt och vet att man kan använda Python till 3dsMax och Revit (vi kan PM:as om det låter spännande med det, så kan vi utbyta idéer, programmerare och grafiker)
Java var väl inne ett tag, tack vare multiplattform. Har Python tagit över denna roll?

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Nov 2012
Skrivet av Haider of Sweden:

Grymt, tycker alltid att programmerare har super-powers!

Vi tar ett steg tillbaka. Jag laddar ner python från python.org och sedan är det bara o köra PIP-kommandot?

Kan du göra scriptet smart så att man kan lägga till parametrar, tex
- sök efter fler filändelse. (Skulle vilja hitta fler filändelser, tex .MAX och .VRMESH)
- ange sökväg (istället för att hårdkoda den)
- parameter för att söka i undermappar (i stil med /S eller -S)

tack än en gång!
Funderar på att förmå döttrarna o börja lära sig Python. Har förstått att det är ett bra instegsspråk. har ingen koll på hur utbrett och användbart det är.
Är själv grafiker och arkitekt och vet att man kan använda Python till 3dsMax och Revit (vi kan PM:as om det låter spännande med det, så kan vi utbyta idéer, programmerare och grafiker)
Java var väl inne ett tag, tack vare multiplattform. Har Python tagit över denna roll?

Precis, ladda ner python därifrån. sen kör "pip install rarfile" från kommandotolken!

Den uppdaterade versionen finns här - https://pastebin.com/3aa8JnBD
Jag har döpt python filen till script.py, men det är såklart valfritt!

Därefter kör du nedan kommandon!
python script.py --path C:\Users\OscarAndersson\Desktop\script

Vill du att den ska gå vidare i mappar som finns här inne kan du lägga till --diveMap så att kommandot blir som nedan
python script.py --path C:\Users\OscarAndersson\Desktop\script --diveMap

Vill du uppdatera filändelsen från .OBJ (har satt det som default just nu) så lägger du till --ext .nytt då blir kommandot som nedan
python script.py --path C:\Users\OscarAndersson\Desktop\script --ext .nytt

Vill du köra alla paramterar samtidigt kör du nedan
python script.py --path C:\Users\OscarAndersson\Desktop\script --diveMap --ext .nytt

Skulle säga att python är ett mycket bra instegsspråk! Det var ett av dem första språken jag lärde mig!
Är tyvärr ointresserad av grafik och dylikt, så måste tyvärr tacka nej här!
Men behöver du hjälp med något annat så är det bara att ropa till Skoj med sånthär!

Trädvy Permalänk
Medlem
Registrerad
Nov 2012

Tack!

Finns stöd för fler ändelser i samma sökning? --ext .obj .3ds ?
Finns stöd för undermappar som en parameter?

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Nov 2012
Skrivet av Haider of Sweden:

Tack!

Finns stöd för fler ändelser i samma sökning? --ext .obj .3ds ?
Finns stöd för undermappar som en parameter?

Skickades från m.sweclockers.com

https://pastebin.com/k9NwEPFa

--ext .txt .obj

Nu kan man skicka in flera filändelser

Förstår inte riktigt vad du menar med undermappar? Tänker du att du inte skickar in --diveMap utan istället skickar med
--path D:\test D:\test\mappett
Så att den söker igenom båda nedan?
D:\test
D:\test\mappett

Så att du manuellt specificerar vilka mappar den ska söka i?

Trädvy Permalänk
Medlem
Registrerad
Nov 2012

Sorry, mitt fel! Jag läste "drive" och inte "dive", så detta kommando torde vara det jag söker efter.
Ska testköra inom kort och återkomma med en rapport

Trädvy Permalänk
Medlem
Registrerad
Nov 2012

Här är resultatet:

C:\Script>dummy_asset_file.py --path "D:\3d Assets\30" --ext .obj .max Traceback (most recent call last): File "C:\Script\dummy_asset_file.py", line 43, in <module> main() File "C:\Script\dummy_asset_file.py", line 33, in main checkFileEnding(item.filename, file) File "C:\Script\dummy_asset_file.py", line 16, in checkFileEnding open(completePath, "x") FileNotFoundError: [Errno 2] No such file or directory: 'D:\\3d Assets\\30\\Scene_001/001_Proxy.max'

Rar-filen visar sig ha en egen mappstruktur och antingen bråkar scriptet med vilken typ av slash (\\ eller /), eller om det är just mappstruktur inne i de packade filerna.

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Nov 2012
Skrivet av Haider of Sweden:

Här är resultatet:

C:\Script>dummy_asset_file.py --path "D:\3d Assets\30" --ext .obj .max Traceback (most recent call last): File "C:\Script\dummy_asset_file.py", line 43, in <module> main() File "C:\Script\dummy_asset_file.py", line 33, in main checkFileEnding(item.filename, file) File "C:\Script\dummy_asset_file.py", line 16, in checkFileEnding open(completePath, "x") FileNotFoundError: [Errno 2] No such file or directory: 'D:\\3d Assets\\30\\Scene_001/001_Proxy.max'

Rar-filen visar sig ha en egen mappstruktur och antingen bråkar scriptet med vilken typ av slash (\\ eller /), eller om det är just mappstruktur inne i de packade filerna.

Kan du skicka över ett exempel på .rar fil så att jag kan testa?

Trädvy Permalänk
Medlem
Registrerad
Nov 2012
Skrivet av fragstealern:

Kan du skicka över ett exempel på .rar fil så att jag kan testa?

Vet inte hur man attachar en fil här på forumet, så här kommer en dropbox-länk
https://www.dropbox.com/s/9sw2wqkoi4b5sgn/model_50.rar?dl=0

det är en dummy fil med tomma mappar, men jag såg till att härma en tänkbar mappstruktur och hur filerna är spridda inuti.

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Nov 2012
Skrivet av Haider of Sweden:

Vet inte hur man attachar en fil här på forumet, så här kommer en dropbox-länk
https://www.dropbox.com/s/9sw2wqkoi4b5sgn/model_50.rar?dl=0

det är en dummy fil med tomma mappar, men jag såg till att härma en tänkbar mappstruktur och hur filerna är spridda inuti.

Problemet är att finns en mapp struktur inne i .rar filen.

Frågan som behöver besvaras för att lösa det är:

Vill du att dummy filen fortsatt ska sparas bredvid .rar filen? Eller vill du att scriptet ska skapa en ny map som heter "model_50" och därefter lägga filerna där?

Exempelvis om vi har denna mapstrukturen
/model_50.rar

Vill du då att scriptet ska lägga filerna såhär
/model_50.rar
/file1
/file2
/file3

Eller vill du att scriptet ska lägga filerna såhär:
/model_50.rar
/model_50/file1
/model_50/file2
/model_50/file3

Med tanke på ditt första inlägg (Där du säger "i samma mapp som ZIP / RAR filen.") antar jag att du vill ha det bredvid .rar filen?

Om du vill ha det i samma map som .rar filen alltid så ska detta fungera: https://pastebin.com/bKTSncdn

Trädvy Permalänk
Medlem
Registrerad
Nov 2012

Snyggt @fragstealern!
Du gjorde en helt korrekt tolkning att lägga dummyfilerna bredvid .RAR filen.
En återskapad mappstruktur går emot nyttan med detta program; att med dummyfiler visualisera .RAR filens innehåll utan att behöva gå in i den. En mappstruktur skulle tvinga en att behöva gräva runt efter filerna och då kan man ju lika gärna gå in i .RAR-filen.
Det kan mycket väl vara att andra användare skulle vilja återskapa mappstrukturen, men här och nu tycker jag att din lösning fungerar mycket bra!

Fråga: när jag kör med parametern -h för att få fram hjälpen säger den tex --diveMap [DIVEMAP]. Vad syftar [DIVEMAP] till? Är det ett annat sätt att köra parametern, alltså antingen --diveMap eller [DIVEMAP], eller något annat?

Bugg: när jag kör utan --ext så fångar den upp mappar som slutar med ordet "obj", alltså inte bara filer som heter .obj. Kör jag däremot --ext .OBJ så blir det rätt och mapparna ignoreras.

Önskemål: kan du lägga till ytterligare en parameter till --ext som gör att man blir tillfrågad "Please enter extension(s): ". Du kan välja parameterbenämningen själv, men jag menar alltså något i stil med --ext Q.
Jag sitter nämligen och snickrar på en context-menu till Windows explorer (för att slippa gå genom kommandotolken) med två val:
Make Dummy Asset-file(s)
Make Dummy Asset-file(s) - subdir

Jag funderar då att skapa undermenyer till respektive context-meny med förvalda ändelser samt "custom" som kör just den nyckeln som frågar användaren om extensions.

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Nov 2012
Skrivet av Haider of Sweden:

Snyggt @fragstealern!
Du gjorde en helt korrekt tolkning att lägga dummyfilerna bredvid .RAR filen.
En återskapad mappstruktur går emot nyttan med detta program; att med dummyfiler visualisera .RAR filens innehåll utan att behöva gå in i den. En mappstruktur skulle tvinga en att behöva gräva runt efter filerna och då kan man ju lika gärna gå in i .RAR-filen.
Det kan mycket väl vara att andra användare skulle vilja återskapa mappstrukturen, men här och nu tycker jag att din lösning fungerar mycket bra!

Fråga: när jag kör med parametern -h för att få fram hjälpen säger den tex --diveMap [DIVEMAP]. Vad syftar [DIVEMAP] till? Är det ett annat sätt att köra parametern, alltså antingen --diveMap eller [DIVEMAP], eller något annat?

Bugg: när jag kör utan --ext så fångar den upp mappar som slutar med ordet "obj", alltså inte bara filer som heter .obj. Kör jag däremot --ext .OBJ så blir det rätt och mapparna ignoreras.

Önskemål: kan du lägga till ytterligare en parameter till --ext som gör att man blir tillfrågad "Please enter extension(s): ". Du kan välja parameterbenämningen själv, men jag menar alltså något i stil med --ext Q.
Jag sitter nämligen och snickrar på en context-menu till Windows explorer (för att slippa gå genom kommandotolken) med två val:
Make Dummy Asset-file(s)
Make Dummy Asset-file(s) - subdir

Jag funderar då att skapa undermenyer till respektive context-meny med förvalda ändelser samt "custom" som kör just den nyckeln som frågar användaren om extensions.

Hade missat att uppdatera default input på --ext, bra fångat!

kör du --ext Q så blir du nu tillfrågad vilka extensions du vill söka efter - Separera dessa med ett mellanrum

python script.py --path D:\test --ext Q
Please enter extension(s): .jpg .max

Inte helt 100 på varför den skriver ut [diveMAP] men det fungerar inte att använda som input åtminstone. (Finns att läsa mer här vid intresse https://docs.python.org/3.3/library/argparse.html )

Uppdaterad version: https://pastebin.com/8vcMryip