windows - Saml skift/dynamisk variabel fra batch og overfør til C # (Visual Studio 2017)

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg skriver et simpelt batchprogram, der bare søger efter den angivne fil:


@echo off
del temp1.txt
del temp2.txt
set curfile=0
set percentage=0
set numfiles=0
for /f "tokens=*" \%\%n in ('dir \%searchfor\% /b /s') do set numfiles=\%numfiles\%+1
for /f "tokens=*" \%\%n in ('dir \%searchfor\% /b /s') do (
    set /a "rand=\%random\% \% 10"
    set /a "rand=rand*1000"
    ping 1.1.1.1 -n 1 -w \%rand\%> nul
    set curfile=\%curfile\%+1
    set percentage=\%curfile\%*100
    set percentage=\%percentage\%/\%numfiles\%
    set p=\%\%n
if defined p (
echo \%p\% >>temp1.txt
echo \%percentage\% >>temp2.txt
echo \%numfiles\% >>temp3.txt
))


Så jeg er slet ikke bekendt med C #, men det virker ret intuitivt. Mit mål er at oprette et C # -baseret brugergrænseflade til dette, der kan gøre disse opgaver:



  • Kør batch scriptet (lad os kalde batch searchr.bat)

  • Da batchfilen søger gennem filer, og opdatering af variablerne giver os disse værdier:


     The filepath of the file it found (defined as \%\%n and \%p\%)
     The percentage complete of the search through files
     The total number of files on the computer
    

  • Vores C # -program til at indsamle disse variabler og få adgang til dem, og opdatere variablerne som de tilsvarende filer opdateres.



Så i det væsentlige vil jeg have mit C # program kørende, og batchet på samme tid, og C # læser output fra batchfilen live, som de opdaterer.


Jeg forsøgte at holde batchfilen så intuitiv som muligt, der er nogle ting, jeg lige ikke plejede at polere eller optimere.

Bedste reference


hvorfor ikke i ren batch?


@echo off
SetLocal EnableDelayedExpansion

rem your search mask
set "searchfor=*.*"

rem needed to show progress
set/a curfile=0, percentage=0, numfiles=0
for /F "tokens=1,2 delims=#" \%\%a in ('"prompt #$H#$E & echo on & for \%\%b in (1) do rem"') do set "DEL=\%\%a"
for /L \%\%i in (1,1,39) do set "DEL\_LINE=!DEL\_LINE!!DEL!!DEL!"

rem get file number
for /f "tokens=*" \%\%n in ('dir /a-d-s-h /b "\%searchfor\%" ^| find /v /c ""') do set "numfiles=\%\%n" & echo/Processing folder \%\%~dpn&echo/

::now do work
for /f "tokens=*" \%\%n in ('dir /a-d-s-h /b "\%searchfor\%"') do (
  set/a curfile+=1, percentage=curfile*100/\%numfiles\%
  <NUL set/P=!DEL\_LINE!Processing !curfile! of \%numfiles\%, !percentage!\%\%. \%\%~nxn
  rem ...
  rem your code here
  rem ...
  ping 1.1.1.1 -n 1 -w 500> nul
)
echo/&echo/Done.

EndLocal
exit/B