Search code examples
parsingcmddirectorycommandnames

DIR but select specific parts of file names


I have the habit for years to use this very easy and convenient .BAT file to create a simple TXT file of all my files in a directory:

dir *.* > LIST.TXT

but the result includes many pieces of information that I don't need

Now I have many files in a directory in this way:

file 01 [shYddYJQIGfffY].xyz
second file 00008 [shYddYJQIfGf11dfzrffY].exe
filex [shGffY].sys
file that i don't need.txt
many other files that i don't need.bat

1/ which command line can I use with DIR (or anything else) to have in the final LIST.txt files only those information? only the value between [ and ]

Expected result:

shYddYJQIGfffY
shYddYJQIfGf11dfzrffY
shGffY

2/ how to edit the .BAT file to add the string MYRESULT before each of those results, like:

MYRESULT shYddYJQIGfffY
MYRESULT shYddYJQIfGf11dfzrffY
MYRESULT shGffY

Solution

  • Use a for loop (see for /?):

    for /f "tokens=2 delims=[]" %%a in ('dir /b *[*].*') do echo MYRESULT %%a
    

    This for /f loop takes the output of dir /b *[*].* (filtering for relevant files, bare format) line per line and splits it into three parts, first token the part before the first [, token2 the part between [ and ]. and a third part after that. You need the second token only. Then just echo the string together with the extracted substring, done.