Avatar billede jørn meyer Mester
29. januar 2018 - 12:59 Der er 4 kommentarer og
2 løsninger

DOS Batch Selektere filnavne og ændre ext via batch i flere kataloger

Jeg har prøvet at finde samtlige mine gamle filer med ext *.bas
Det er ikke et problem at finde dem  og lægge stierne i en tekstfil (oversigt)
Problemet er, at jeg ønsker at gennemlæse tekstfilen og på baggrund af denne at ændre filernes ect fra *.bas *.b
Den alm. dos kommando rename tager kun hvad der er i aktuelle katalog.
Jeg er startet således:

echo off
cls
dir c:\users\myself\*.bas /s/b >katalog.txt
for /f "tokens=* eol=. Delims=." %%a in (c:\users\myself\katalog.txt) do call :process2 %%a
goto eof
:process2
echo Den fundne line= %*

viser at jeg finder filnavnet i oversigtsfilen

Hvordan
- kommer jeg videre med at læse filnavnene et efter et
- hvordan sættes kommandolinien for renamr filnavn.bas filnavn.b
Avatar billede Slettet bruger
29. januar 2018 - 13:47 #1
jeg mener det kan total commander finde ud af
https://www.ghisler.com
Avatar billede jørn meyer Mester
29. januar 2018 - 14:02 #2
Hej sidwave. Jeg har programmet og ved den gør det i et hug, men som old-man fra datiden ville jeg prøve kræfter i batch/DOS, men tak. mvh Jørn Meyer
Avatar billede claes57 Ekspert
29. januar 2018 - 14:39 #3
du skal over i lidt vbs-kode for at trave mapper igennem og behandle de enkelte filer via input fra dig.
Avatar billede claes57 Ekspert
29. januar 2018 - 17:32 #4
jeg har en vbs liggende, hvor dialogboks bruges til at pege frem til en mappe, og så viser den alle pdf'er i mappen. Det kan så udbygges, så der er en anden dialogboks, der spørger efter omdøbning, og inkluderer undermapper. Men her er en start at arbejde videre på (skal være .vbs for at kunne køres):

Function Browse4Folder(strPrompt, intOptions, strRoot)
    Dim objFolder, objFolderItem

    On Error Resume Next

    Set objFolder = objShell.BrowseForFolder(0, strPrompt, intOptions, strRoot)
    If (objFolder Is Nothing) Then
      Wscript.Quit
    End If
    Set objFolderItem = objFolder.Self
    Browse4Folder = objFolderItem.Path
    Set objFolderItem = Nothing
    Set objFolder = Nothing
End Function

'On Error Resume Next

Const WINDOW_HANDLE = 0
Const BIF_EDITBOX = &H10
Const BIF_NONEWFOLDER = &H0200
Const BIF_RETURNONLYFSDIRS = &H1

Set objShell = CreateObject("Shell.Application")
Set wshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

' lad bruger vælge mappen, der skal listes
strPrompt = "Vælg den mappe, der skal listes."
intOptions = BIF_RETURNONLYFSDIRS + BIF_NONEWFOLDER + BIF_EDITBOX
strTargetPath = wshShell.SpecialFolders("MyDocuments")
strFolderPath = Browse4Folder(strPrompt, intOptions, strTargetPath)

Set objNewFile = objFSO.CreateTextFile(strFolderPath & "\filliste.txt", True)
Set objFolder = objFSO.GetFolder(strFolderPath)
Set objColFiles = objFolder.Files
objNewFile.WriteLine("Navn,Vejnavn,Husnr,Type")
For Each file In objColFiles
  Set objFile = objFSO.GetFile(strFolderPath & "\" & file.Name)
  If Lcase(objFSO.GetExtensionName(objFile)) = "pdf" Then
    objNewFile.WriteLine(objFSO.GetBaseName(objFile))
  End If
Next

objNewFile.Close
Avatar billede RogerWilco Seniormester
29. januar 2018 - 20:16 #5
Hvorfor ikke bare:

echo off
cls
dir c:\users\myself\*.bas /s/b >katalog.txt
for /f  %%a in (c:\users\myself\katalog.txt) do ren %%a *.b
Avatar billede jørn meyer Mester
29. januar 2018 - 21:59 #6
Hej RogerWilco og  Claes57.
Tak for input.
Jeg havde lavet en brøler derved, at jeg glemte
goto :eof
for at få for  /f
til at virke. Det løste så ikke opgaven, men jeg vil arbejde med jeres oplæg.
Tak for hjælpen begge.
Mvh Jørn Meyer
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester