PDA

Показать полную графическую версию : [решено] поиск файла по маске и запись этого имени в переменную


Страниц : [1] 2

___dima___
29-07-2010, 16:29
Доброго дня!
Задача такая:
нужен батник в котором происходит поиск файла по маске и запись его имени в переменную для последующей обработки

if exist c:\sk*
как-то записать имя найденного в переменную

что-то типа этого (http://forum.oszone.net/thread-143939.html) , но только батником

NiOl
29-07-2010, 17:13
Если путь фиксирован и поиск по подкаталогам не требуется, то уберите ключ /s из команды dir:

for /f "Tokens=1* Delims=" %%F in ('dir /b c:\sk*') do set File=%%F
echo %File%

megaloman
30-07-2010, 20:37
Я бы предложил такое вот решение:@Echo Off

Set Maska="c:\sk*"

FOR %%i IN (%Maska%) DO Call :Obrabotka "%%i"

GoTo :EOF

:Obrabotka
Echo %1

Если несколько файлов подпадают под указанную маску, то при вызове подпрограммы Obrabotka можно обработать необходимым образом каждый файл. Полное имя файла (с кавычками) хранится в переданном параметре %1.
Естественно, кавычки в подпрограмме можно убрать (вызывайте for /? и смотрите как), только зачем это нужно?
Если очень хочется, можно написать
Set FileName=%1

Если Вы уверены, что файл один, то, конечно, можно написать коротенько
FOR %%i IN ("c:\sk*") DO Set FileName="%%i"
Echo %FileName%

А вот решение, если файлы надо искать в поддиректориях @Echo Off

Set FDir="С:\"
Set Maska="sk*"

FOR /R %FDir% %%i IN (%Maska%) DO Call :Obrabotka "%%i"
GoTo :EOF

:Obrabotka
Echo %1

___dima___
09-08-2010, 09:33
Спасибо, ребят!
здорово помогли. воспользовался способом который попроще (как раз то что надо)
FOR %%i IN ("c:\sk*") DO Set FileName="%%i"
Echo %FileName%

DonQuixote
11-07-2015, 00:44
мне нужно тоже самое Но что бы путь к файлам не выводился
мне подошёл первый вариант от megaloman
командой >> files.txt я вывожу список файлов но там имеются пути к файлам...без них бы.

Georgio
11-07-2015, 11:05
командой >> files.txt я вывожу список файлов но там имеются пути к файлам...без них бы. »



@echo off

set "Maska=c:\sk*"

for %%i in ("%Maska%") do >>"files.txt" echo %%~nxi

exit/b

Georgio
12-07-2015, 06:57
А вообще-то то же самое сделает команда "DIR" (более того, даже будут учтены скрытые файлы):


@echo off

set "Maska=c:\sk*"

>"files.txt" dir/a-d/b "%Maska%"

exit/b


.

DonQuixote
15-07-2015, 14:44
Georgio, тоже верно)
я пока копался в поисках кое как нашёл свой способ,до вашего ещё.(переделал под себя, он искал файлы 2015 года,имеющие дату изминения между 7 и 12 месяцем)
for /f "tokens=1-3*" %%a in ('dir "%BINDIR%\%maskF%" /a-d /-c /t:c ^|findstr /RC:"^[0-9][0-9]\.0[0-9].*" /C:"^[0-9][0-9]\.1[0-2].*"') do echo %%d>>settingsSTART\SETgameF.iniвозник ещё вопрос,тоже по списку файлов.
Setlocal EnableDelayedExpansion
FOR /F "delims=" %%i IN ('DIR /A-D /B /S .\libraries\*.jar') DO (SET sLib="%%i";!sLib!)
Setlocal DisableDelayedExpansionищет все файлы в папке создовая список в переменной %sLib% в одну строчку такова вида
"g:\1111111\22222\libraries\file1.jar";"g:\1111111\22222\libraries\file2.jar";"g:\1111111\22222\libraries\22222\file3.jar";"g:\1111111\22222\libraries\file.jar";"g:\.... и т. д.но мне мешают полные пути опять...можно сделать вот так?
.\\libraries\io\netty\netty-all\file.jar\file.jar;.\\libraries2\file.jar;.\\libraries2\commons-file.jar;только не знаю можно ли и нужно ли "" вернуть..
и начинается со .\\librarie
наверно запутал)
то есть мне нужно что бы
g:\папка\папка\папка\папка\libraries\папка\папка\file1.jar
слева весь путь до папки libraries был убран
\libraries\папка\папка\file1.jar и в начале стояло .\\
.\\libraries\папка\папка\file1.jar

krec
10-06-2017, 17:24
ребят, подскажите скрипт, для поиска всех медиа-файлов на C:\\Users
система - win10. из телефонов скидывали всякую хрень в компьютеры.
фото, видео, аудио

alpap
11-06-2017, 11:12
krec,
запасайтесь куревом :)

@echo off
set "d_in=C:\%Username%"
:: set "d_in=%Userprofile%"
set "d_out=C:\Papka_out"
set "n1=Audio"& set "r1=2sf,2sflib,3ga,5xb,5xe,5xs,669,6cm,8cm,8svx,a2b,a2i,a2m,a2p,a2t,a52,aa,aa3,aac,aax,abc,abm,ac3,ac d,acd-bak,acd-zip,acm,acp,act,adg,adts,adv,afc,agm,agr,ahx,aif,aifc,aiff,aimppl,ais,akp,al,alac,alaw,all,als,amf,a mr,ams,amxd,amz,aob,ape,apf,apl,aria,ariax,ase,at3,atrac,au,aud,aup,avastsounds,awb,ay,b4s,band,bap, bcs,bdd,bidule,bmml,bonk,box,brstm,bun,bwf,bwg,bww,c01,caf,caff,cda,cdda,cdlx,cdo,cdr,cel,cfa,cgrp,c idb,ckb,ckf,cmf,copy,cpr,csh,cts,cwb,cwp,cwt,d00,d01,dcf,dcm,dct,ddt,df2,dfc,dig,djr,dls,dm,dmf,dmsa ,dmse,dra,drg,ds2,dsf,dsm,dsp,dss,dtm,dts,dtshd,dvf,dw,dwa,dwd,ear,efa,efe,efk,efq,efs,efv,emd,emp,e mx,emy,eop,esps,evr,expressionmap,f2r,f32,f3r,f4a,f64,far,fda,fff,flac,flp,fls,frg,fsm,ftmx,fzf,g721 ,g723,g726,gbs,gig,gm,gp5,gpbank,gpk,groove,gsm,h0,h3b,h3e,h4b,h4e,h5b,h5e,h5s,hbb,hbs,hma,hmi,hsb,i aa,ics,iff,igp,imf,imp,ins,isma,it,iti,itls,its,jam,jo,jo-7z,k25,k26,kar,kfn,kin,kit,kmp,koz,kpl,krz,ksc,ksd,ksf,ksm,kt2,kt3,ktp,l,la,lof,lqt,lvp,lwv,m1a,m3u, m3u8,m4a,m4b,m4p,m4r,ma1,mbr,mdl,med,mgv,mid,midi,mini2sf,minincsf,minipsf,minipsf2,miniusf,mka,mlp, mmf,mmm,mmpz,mo3,mod,mogg,mp_,mp1,mp2,mp3,mpa,mpc,mpd,mpdp,mpga,mpu,mscx,msv,mt2,mt9,mte,mti,mtm,mtp ,mts,mu3,mus,musa,musx,mux,muz,mws,mx3,mx4,mx5,mx5template,mxmf,myr,mzp,nap,nkb,nkc,nki,nkm,nks,nkx, nml,nmsv,nra,nrt,nsa,nsf,nst,ntn,nvf,nwc,obw,odm,ofr,oga,ogg,okt,oma,omf,omg,omx,opus,orc,ots,pac,pa t,pbf,pca,pcast,pcg,pcm,peak,pek,pho,phy,pjunoxl,pk,pkf,pla,pls,plst,pna,pno,ppc,ppcx,prg,psf1,psf2, psm,psy,ptcop,ptf,ptm,pts,pvc,q1,q2,qcp,r,r1m,ra,ram,raw,rax,rbs,rcy,record,rex,rfl,rgrp,rip,rmf,rmi ,rmj,rmm,rmx,rng,rns,rol,rsf,rsn,rso,rta,rti,rtm,rts,rvx,rx2,s3i,s3m,s3z,saf,sam,sap,sb,sbg,sbi,sbk, sc2,scs11,sd,sd2,sd2f,sdat,sdii,sds,sdx,seg,ses,sesx,sf,sf2,sfap0,sfk,sfl,sfpack,sgp,shn,sib,sid,slx ,smf,smp,smpx,snd,sng,sns,snsf,sou,sph,sppack,spx,sseq,ssnd,stm,stx,sty,svd,svx,sw,swa,swav,sxt,syh, syn,syw,syx,tak,td0,tfmx,thx,tm2,tm8,tmc,toc,trak,tsp,tta,tun,txw,u,u8,ub,ulaw,ult,ulw,uni,usf,usfli b,ust,uw,uwf,v2m,vag,val,vap,vc3,vdj,vgm,vlc,vmd,vmf,vmo,voc,voi,vox,voxal,vpl,vpm,vpw,vqf,vrf,vsq,v yf,w01,w64,wav,wave,wax,wem,wfb,wfd,wfp,wma,wow,wpk,wproj,wrk,wus,wut,wv,wvc,wve,wwu,wyz,xbmml,xfs,x i,xm,xmf,xmi,xmz,xp,xpf,xrns,xsb,xsp,xspf,xt,xwb,ym,yookoo,zab,zpa,zvd,zvr"
set "n2=Video"& set "r2=264,3g2,3gp,3gp2,3gpp,3gpp2,3mm,3p2,60d,787,890,aaf,aec,aep,aepx,aet,aetx,ajp,ale,am,amc,amv,amx, anim,aqt,arcut,arf,asf,asx,avb,avchd,avd,avi,avp,avs,avv,awlive,axm,bdm,bdmv,bik,bin,bix,bnp,box,bs4 ,bsf,bu,bvr,byu,camproj,camrec,camv,ced,cine,cip,clpi,cmmp,cmmtpl,cvc,cx3,d2v,d3v,dash,dat,dav,dce,d ck,ddat,dif,dir,divx,dlx,dmb,dmsd,dmsd3d,dmsm,dmsm3d,dmss,dmx,dnc,dpa,dpg,dream,dv,dv4,dv-avi,dvr,dvr-ms,dvx,dxr,dzm,dzp,dzt,edl,evo,eye,f4f,f4p,f4v,fbr,fbz,flc,flh,fli,flv,flx,ftc,gfp,gl,gom,grasp,gts, gvi,gvp,h264,hdmov,hdv,hkm,ifo,imovieproject,ircp,irf,ismc,ismv,iva,ivf,ivr,ivs,izz,izzy,jmv,jss,jts ,jtv,k3g,kmv,lrec,lrv,lsf,lsx,lvix,m15,m1pg,m1v,m21,m2a,m2t,m2ts,m2v,m4e,m4u,m4v,m75,mani,meta,mgv,m j2,mjp,mjpg,mk3d,mkv,mmv,mnv,mob,mod,moff,moi,moov,mov,movie,mp21,mp2v,mp4,mp4v,mpe,mpeg,mpeg1,mpeg4 ,mpf,mpg,mpg2,mpgindex,mpl,mpls,mpsub,mpv,mpv2,mqv,msdvd,msh,mswmm,mts,mtv,mvb,mvc,mvd,mve,mvex,mvp, mvy,mxf,mxv,mys,ncor,nsv,nut,nuv,nvc,ogm,ogv,ogx,orv,otrkey,par,pds,pgi,photoshow,piv,pjs,playlist,p lproj,pmf,pmv,ppj,prel,pro,pro4dvd,pro5dvd,proqc,prproj,prtl,prx,psh,pssd,pva,pvr,pxv,qt,qtch,qtinde x,qtl,qtm,qtz,r3d,rdb,rec,rm,rmd,rmp,rms,rmv,rmvb,roq,rp,rsx,rts,rum,rv,rvl,sbk,sbt,scm,scn,sdc,sdv, sedprj,sfvidcap,siv,smi,smil,smk,sml,smv,snagproj,spl,srt,ssm,str,stx,svi,swf,swi,swt,tda3mt,tdx,tid ,tivo,tix,tod,tp,tp0,tpd,tpr,trp,ts,ttxt,tvs,usm,vbc,vc1,vcpf,vcr,vcv,vdo,vdr,veg,vem,vep,vf,vft,vfw ,vfz,vgz,vid,video,viewlet,viv,vivo,vix,vlab,vob,vp3,vp6,vp7,vpj,vro,vs4,vse,vsp,w32,wcp,webm,wm,wmd ,wmmp,wmv,wmx,wp3,wtv,wvx,xej,xel,xesc,xfl,xlmv,xmv,xvid,y4m,yog,yuv,zeg,zm1,zm2,zm3,zmv"
set "n3=Photo"& set "r3=001,3d,3d4,3df,8pbs,ac5,ac6,acr,adc,ais,amu,arr,awd,blz,bmc,bmf,btf,cag,cam,ce,cil,cpt,crw,csf,cu t,dcm,ddb,ddrw,dng,emz,exif,fac,face,fbm,fh9,fhd,fits,fs,gks,gry,hcx,hf,hip,hr,hrf,ic1,ic3,ica,icb,i ff,ilbm,imj,ink,ithmb,ivr,jbf,jfi,jif,jiff,jpc,jpf,jpw,kfx,kodak,mag,max,mcs,mgf,mgs,mic,mip,mix,mma ,mng,mrb,mrw,msk,msp,nav,ncd,nef,neo,nff,nif,ntc,ntf,odc,odg,odi,odif,opf,otb,ovw,p65,pac,pat,pct,pd ,pdg,pfr,pi4,pi5,pi6,pic,picnc,pictclipping,ply,pm3,pnt,pov,psb,psf,pspimage,pwp,pws,qif,qti,qtif,ra f,raw,ray,rds,rif,sar,scg,scp,scu,sda,sdr,sff,sgi,shg,si,sid,sig,sim,smp,spc,spiff,spu,sr,srf,std,su n,suniff,sup,taac,tddd,thm,tn1,tn2,tn3,tny,trif,u,urt,v,vic,viff,vis,vna,vss,vst,web,wgs,wi,wic,wmp, wnk,x3d,xbm,xcf,xif,xof,xpm,xsi,xwd,xws,ydl,yuv,zgm"

cmd/v/c "for /l %%a in (1,1,3) do @for %%b in (!r%%~a!) do @for /f "delims=" %%c in ('dir /a-d /b /s "%d_in%\*.%%~b" 2^>nul') do @(if not exist "%d_out%\!n%%~a!" md "%d_out%\!n%%~a!")& (>nul copy "%%~c" "%d_out%\!n%%~a!")"
exit


рабочий код можно и так записать (понятнее), но у меня так чуть дольше

for /l %%m in (1,1,3) do call :# "%%r%%m%%" "%%n%%m%%"
pause& exit

:#
for %%a in (%~1) do for /f "delims=" %%A in ('dir /a-d/b/s "%d_in%\*.%%a" 2^>nul') do (
if not exist "%d_out%\%~2" md "%d_out%\%~2"
>nul copy "%%A" "%d_out%\%~2"
)
exit /b

а вообще не барское это дело не для cmd это задача - медленно, надо или Powershell или vbs/js, гораздо шустрее будет.
хотя, если поиск будет исключительно одного уровня ('dir /a-d/b "%d_in%\*.%%a" - без ключа /s, непосредственно в папке, не ниже) и расширений напишете сами штук с десяток, то и cmd быстро сработает.

krec
11-06-2017, 12:10
alpap, Спасибо.

МНе нужен найти все медиа - файлы под учетной записью. а тонее в папке C:\\Users
первый скрипт мне больше понятен, чем второй. но там не понял в выводом.. он все файлыу будет копировать C:\Papka_out ?
мне пойдет и в explorere просто, чтоб видеть сразу что это. А с копированием это очень долго и потом хрен поймешь что откуда.

Что касается js.. ели они будут работать без дополнения, то можете предлагать рабочий вариант? Мне не принципиально на чем написан скрипт, хоть на С++, лишь бы работал нормально

Iska
11-06-2017, 13:07
а вообще не барское это дело не для cmd это задача - медленно, »
В общем-то — нет. dir работает достаточно шустро, когда получение перечня идёт чохом. Вот когда переход в подкаталог, dir, переход во вложенный каталог, ещё dir, возврат на уровень выше, переход в следующий вложенный каталог, опять dir и т.д. — тогда медленно.

файлы под учетной записью. а тонее в папке C:\\Users »
Или-или. Под учётной записью — кого? Текущего пользователя?

krec, поясните, что Вы планируете делать с полученным перечнем? Где, когда и как планируете исполнять пакетный файл/скрипт/сценарий? С какой периодичностью? От чьего имени?

krec
11-06-2017, 22:12
Iska, Под учётной записью — кого? Текущего пользователя? »
под текущего пользователя.
полученные данные - для начала для просмотра, с дальнейшем удалением. То есть сначала собираем все, смотрим что к чему, если файлы не относяться к рабоче, то удаляем.
А то захламляли всю систему своими личными фото/видео/мызыка контентом.

Iska
12-06-2017, 00:28
krec, тогда таки рискну предложить Far Manager — переход в искомый каталог, поиск по набору масок, отправка результатов поиска на панель, последующий разбор. При наличии соответствующих плагинов смотреть-слушать содержимое файла можно прямо тут же, на панели, без запуска внешних приложений, и сразу же удалять-перемещать.

krec
13-06-2017, 15:57
Iska, неа, с far вообще не лажу ))

alpap
13-06-2017, 19:38
под текущего пользователя. »
ну то какие проблемы с приведенным мною кодом
- ставите путь в переменную какой нужен
- вместо "copy" пишите "move"
- ставите свой путь к папке, где будут создаваться папки с соответствующими именами медиа файлов
и в таком случае из папки (которую вы указали в переменной) будут удалены все медиа файлы, но не просто удалены, а перемещены в конечную папку (тоже вами указанную) где вы спокойно можете лицезреть все эти файлы и делать с ними все
что пожелаете.

вот папка текущего пользователя, если непонятно:

echo C:\Users\%Username%
:: Или так или так
echo %Userprofile%
pause


или надо чисто в папку "C:\Users" попасть, кроме как в лоб, можно и так:

:: Вар1
pushd %Userprofile%\..
echo %cd%
popd
:: Вар2
cd /d %Systemdrive%\Users
echo %cd%
pause

krec
14-06-2017, 00:07
alpap, ну а просто выводить нельзя? вот как ПОИСК в системе - помню, в XP в поиске набрал например .*Jpeg и в этом странице мне списком выводил все фалйлы с такой расширением. такое нельзя делать с скриптом, чтоб несколько расширений сразу выводил?

alpap
14-06-2017, 00:46
тогда делайте так:

where /r "Диск:\Папка" *.avi *.mp3 *.jpeg

Iska
14-06-2017, 01:32
Iska, неа, с far вообще не лажу )) »
Зря не хотите попробовать, хорошая штука. Если дозреете — могу попробовать расписать.

krec
17-06-2017, 23:28
alpap,
ммм, можете показать полный код? это будет батник?

Iska, я только за :) есть у вас есть готовый сценарий, то пожалуйста!




© OSzone.net 2001-2012