Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] поиск файла по маске и запись этого имени в переменную (http://forum.oszone.net/showthread.php?t=181712)

___dima___ 29-07-2010 16:29 1462957

поиск файла по маске и запись этого имени в переменную
 
Доброго дня!
Задача такая:
нужен батник в котором происходит поиск файла по маске и запись его имени в переменную для последующей обработки

Код:

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

что-то типа этого , но только батником

NiOl 29-07-2010 17:13 1462998

Если путь фиксирован и поиск по подкаталогам не требуется, то уберите ключ /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 1463796

Я бы предложил такое вот решение:
Код:

@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 1469803

Спасибо, ребят!
здорово помогли. воспользовался способом который попроще (как раз то что надо)
Код:

FOR %%i IN ("c:\sk*") DO Set FileName="%%i"
Echo %FileName%


DonQuixote 11-07-2015 00:44 2527612

мне нужно тоже самое Но что бы путь к файлам не выводился
мне подошёл первый вариант от megaloman
командой >> files.txt я вывожу список файлов но там имеются пути к файлам...без них бы.

Georgio 11-07-2015 11:05 2527674

Цитата:

Цитата DonQuixote
командой >> 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 2527898

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


Код:

@echo off

set "Maska=c:\sk*"

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

exit/b


.

DonQuixote 15-07-2015 14:44 2529088

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 2743511

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

alpap 11-06-2017 11:12 2743644

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,acd,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,amr,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,cidb,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,emx,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,iaa,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,pat,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,usflib,ust,uw,uwf,v2m,vag,val,vap,vc3,vdj,vgm,vlc,vmd,vmf,vmo,voc,voi,vox,voxal,vpl,vpm,vpw,vqf,vrf,vsq,vyf,w01,w64,wav,wave,wax,wem,wfb,wfd,wfp,wma,wow,wpk,wproj,wrk,wus,wut,wv,wvc,wve,wwu,wyz,xbmml,xfs,xi,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,dck,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,mj2,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,plproj,pmf,pmv,ppj,prel,pro,pro4dvd,pro5dvd,proqc,prproj,prtl,prx,psh,pssd,pva,pvr,pxv,qt,qtch,qtindex,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,cut,dcm,ddb,ddrw,dng,emz,exif,fac,face,fbm,fh9,fhd,fits,fs,gks,gry,hcx,hf,hip,hr,hrf,ic1,ic3,ica,icb,iff,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,raf,raw,ray,rds,rif,sar,scg,scp,scu,sda,sdr,sff,sgi,shg,si,sid,sig,sim,smp,spc,spiff,spu,sr,srf,std,sun,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 2743652

alpap, Спасибо.

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

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

Iska 11-06-2017 13:07 2743662

Цитата:

Цитата alpap
а вообще не барское это дело не для cmd это задача - медленно, »

В общем-то — нет. dir работает достаточно шустро, когда получение перечня идёт чохом. Вот когда переход в подкаталог, dir, переход во вложенный каталог, ещё dir, возврат на уровень выше, переход в следующий вложенный каталог, опять dir и т.д. — тогда медленно.


Цитата:

Цитата krec
файлы под учетной записью. а тонее в папке C:\\Users »

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

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

krec 11-06-2017 22:12 2743782

Iska,
Цитата:

Цитата Iska
Под учётной записью — кого? Текущего пользователя? »

под текущего пользователя.
полученные данные - для начала для просмотра, с дальнейшем удалением. То есть сначала собираем все, смотрим что к чему, если файлы не относяться к рабоче, то удаляем.
А то захламляли всю систему своими личными фото/видео/мызыка контентом.

Iska 12-06-2017 00:28 2743815

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

krec 13-06-2017 15:57 2744218

Iska, неа, с far вообще не лажу ))

alpap 13-06-2017 19:38 2744278

Цитата:

Цитата krec
под текущего пользователя. »

ну то какие проблемы с приведенным мною кодом
- ставите путь в переменную какой нужен
- вместо "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 2744353

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

alpap 14-06-2017 00:46 2744362

тогда делайте так:
Код:

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

Iska 14-06-2017 01:32 2744368

Цитата:

Цитата krec
Iska, неа, с far вообще не лажу )) »

Зря не хотите попробовать, хорошая штука. Если дозреете — могу попробовать расписать.

krec 17-06-2017 23:28 2745496

alpap,
ммм, можете показать полный код? это будет батник?

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

alpap 18-06-2017 01:46 2745510

Цитата:

Цитата krec
можете показать полный код? это будет батник? »

пост18? Да, полный код, от вас путь и дополнить варианты расширений
батник? Ну думаю в батнике будет удобнее написать заранее сотню другую расширений, если они к тому же не будут меняться, для батника добавите еще ниже строку с словом PAUSE, вы же написали что достаточно только увидеть на экране искомые файлы.


Время: 02:22.

Время: 02:22.
© OSzone.net 2001-