명령 프롬프트에서 진행률 막대를 재현
7129 단어 cmdProgressBarbat슬립
개요
bat등으로 처리를 하면(자), 뒤에서 움직이고 있는지 죽고 있는지 모르게 될 때가 있어 불친절할까라고,,,
나중에 사용자의 감정이되면 진행률 표시 줄이있는 것이 PC가 일하고 있음을 인식 할 수 있기 때문에
대기 시간의 좌절이 조금 완화되는 것 같았습니다.
현물
진행 상황을 기록하는 텍스트 파일을 모니터링하고 텍스트 파일의 마지막 행이 다시 작성될 때마다 진행률 표시줄을 표시합니다.
"Done"이라는 문자열을 인식하면 종료됩니다.
메커니즘
진행 바 본체의 배치 파일이나 SLEEP에 대해서.
파일 구조
ProgressBar.bat가 진행 관리를위한 텍스트 파일을 열고 sleep.exe가 어떤 곳에서 보이는지 확인하십시오.
아래는 예입니다.
OneDrive tool.zip
c:\tool>tree /F
Folder PATH listing for volume Windows7_OS
Volume serial number is 2E48-0DB5
C:.
│ progress.txt
│
├───ProgressBar
│ ProgressBar.bat
│ ReadMe.txt
│
└───Sleep
ReadMe.txt
sleep.exe
스크립트
진행률 막대의 bat 파일은 다음과 같습니다.
ProgressBar.bat@echo off
rem 進捗用テキストファイルを%temp%に吐き出すようにして、V_FILEPATHの値を%temp%\%1にすると絶対パスで渡せるためお勧め。
set V_FILEPATH=%1
set V_FL=""
set V_RUNSCRIPT=""
set V_TOOLPATH=""
set V_SLEEPPATH=""
set V_CURRENTDIRECTORY=%cd%
rem 実行パスからsleepパス取得
cd /d %~dp0
cd ../
set V_TOOLPATH=%cd%
rem sleep.exeパス取得
set V_SLEEPPATH=%V_TOOLPATH%\Sleep\sleep.exe
if not exist %V_SLEEPPATH% call :ERR "sleep.exe is not exist"
rem カレントディレクトリへ移動
cd %V_CURRENTDIRECTORY%
rem プログレスバー処理開始
:LOOP
call :TAIL %1%
set RUNSCRIPT=%V_FL%
set /p script="%RUNSCRIPT% | "< nul
:PROGRESS
set /p x="#"< nul
rem ping 1.0.0.0 -w 500 -n 1 > nul
rem timeout /t 1 > nul
call %V_SLEEPPATH% -m 500
call :TAIL %1%
if %RUNSCRIPT% neq %V_FL% goto :LOOPCONTINUE
if "%V_FL%" == "Done" goto :DONE
goto :PROGRESS
:LOOPCONTINUE
echo.
if "%V_FL%" == "Done" goto :DONE
goto :LOOP
rem サブルーチン:テキストファイル最終行取得 グローバル変数V_FL
:TAIL
for /F "TOKENS=1" %%s in (%V_FILEPATH%) do set V_FL=%%s
exit /b
rem 終了
:DONE
echo.
echo Done.
pause
exit 0
rem エラー
:ERR
cd /d %V_CURRENTDIRECTORY%
echo ERR %~1
pause
exit 0
사용법
gif 애니메이션과 마찬가지로 ProgressBar.bat의 인수로 진행을 마지막 줄로 내뿜는 텍스트 파일의 경로를 전달하여 시작합니다.
진행을 기록하는 텍스트 파일을 준비해 두고, 처리 개시마다 최종행에 지금의 처리 내용을 기입하는 일을 하면 그것처럼 움직일 수 있습니다.
bat, vbs라고 아래와 같은 느낌.
batecho "実行中の処理~" >> progress.txt
vbsSet objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile("c:\tool\progress.txt", 8, True)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
objFile.WriteLine & "実行中の処理~"
End If
objFile.Close
Set objFile = Nothing
Set objFso = Nothing
SLEEP.EXE
sleep.exe는 Windows Server 2003 Resource Kit Tools라는 것을 사용했습니다.
밀리 세컨드 지정으로 수면을 위해서만 exe입니다.
(exe의 인스톨러입니다만 7zip이나 WinRAR이라면 내용을 빼낼 수 있습니다)
스크립트에 자주 있는 ping 날렸을 때의 대기 시간을 이용한 코드도 있습니다만, 원래 넷 환경이 없는 것 같은 곳이라고 사용할 수 없기 때문에, 제대로 슬립 한다면 이것을 사용하는 편이 좋을 것 같습니다.
Reference
이 문제에 관하여(명령 프롬프트에서 진행률 막대를 재현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wakisuke/items/54b83b02d387bdc57546
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
진행 상황을 기록하는 텍스트 파일을 모니터링하고 텍스트 파일의 마지막 행이 다시 작성될 때마다 진행률 표시줄을 표시합니다.
"Done"이라는 문자열을 인식하면 종료됩니다.
메커니즘
진행 바 본체의 배치 파일이나 SLEEP에 대해서.
파일 구조
ProgressBar.bat가 진행 관리를위한 텍스트 파일을 열고 sleep.exe가 어떤 곳에서 보이는지 확인하십시오.
아래는 예입니다.
OneDrive tool.zip
c:\tool>tree /F
Folder PATH listing for volume Windows7_OS
Volume serial number is 2E48-0DB5
C:.
│ progress.txt
│
├───ProgressBar
│ ProgressBar.bat
│ ReadMe.txt
│
└───Sleep
ReadMe.txt
sleep.exe
스크립트
진행률 막대의 bat 파일은 다음과 같습니다.
ProgressBar.bat@echo off
rem 進捗用テキストファイルを%temp%に吐き出すようにして、V_FILEPATHの値を%temp%\%1にすると絶対パスで渡せるためお勧め。
set V_FILEPATH=%1
set V_FL=""
set V_RUNSCRIPT=""
set V_TOOLPATH=""
set V_SLEEPPATH=""
set V_CURRENTDIRECTORY=%cd%
rem 実行パスからsleepパス取得
cd /d %~dp0
cd ../
set V_TOOLPATH=%cd%
rem sleep.exeパス取得
set V_SLEEPPATH=%V_TOOLPATH%\Sleep\sleep.exe
if not exist %V_SLEEPPATH% call :ERR "sleep.exe is not exist"
rem カレントディレクトリへ移動
cd %V_CURRENTDIRECTORY%
rem プログレスバー処理開始
:LOOP
call :TAIL %1%
set RUNSCRIPT=%V_FL%
set /p script="%RUNSCRIPT% | "< nul
:PROGRESS
set /p x="#"< nul
rem ping 1.0.0.0 -w 500 -n 1 > nul
rem timeout /t 1 > nul
call %V_SLEEPPATH% -m 500
call :TAIL %1%
if %RUNSCRIPT% neq %V_FL% goto :LOOPCONTINUE
if "%V_FL%" == "Done" goto :DONE
goto :PROGRESS
:LOOPCONTINUE
echo.
if "%V_FL%" == "Done" goto :DONE
goto :LOOP
rem サブルーチン:テキストファイル最終行取得 グローバル変数V_FL
:TAIL
for /F "TOKENS=1" %%s in (%V_FILEPATH%) do set V_FL=%%s
exit /b
rem 終了
:DONE
echo.
echo Done.
pause
exit 0
rem エラー
:ERR
cd /d %V_CURRENTDIRECTORY%
echo ERR %~1
pause
exit 0
사용법
gif 애니메이션과 마찬가지로 ProgressBar.bat의 인수로 진행을 마지막 줄로 내뿜는 텍스트 파일의 경로를 전달하여 시작합니다.
진행을 기록하는 텍스트 파일을 준비해 두고, 처리 개시마다 최종행에 지금의 처리 내용을 기입하는 일을 하면 그것처럼 움직일 수 있습니다.
bat, vbs라고 아래와 같은 느낌.
batecho "実行中の処理~" >> progress.txt
vbsSet objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile("c:\tool\progress.txt", 8, True)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
objFile.WriteLine & "実行中の処理~"
End If
objFile.Close
Set objFile = Nothing
Set objFso = Nothing
SLEEP.EXE
sleep.exe는 Windows Server 2003 Resource Kit Tools라는 것을 사용했습니다.
밀리 세컨드 지정으로 수면을 위해서만 exe입니다.
(exe의 인스톨러입니다만 7zip이나 WinRAR이라면 내용을 빼낼 수 있습니다)
스크립트에 자주 있는 ping 날렸을 때의 대기 시간을 이용한 코드도 있습니다만, 원래 넷 환경이 없는 것 같은 곳이라고 사용할 수 없기 때문에, 제대로 슬립 한다면 이것을 사용하는 편이 좋을 것 같습니다.
Reference
이 문제에 관하여(명령 프롬프트에서 진행률 막대를 재현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wakisuke/items/54b83b02d387bdc57546
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
c:\tool>tree /F
Folder PATH listing for volume Windows7_OS
Volume serial number is 2E48-0DB5
C:.
│ progress.txt
│
├───ProgressBar
│ ProgressBar.bat
│ ReadMe.txt
│
└───Sleep
ReadMe.txt
sleep.exe
@echo off
rem 進捗用テキストファイルを%temp%に吐き出すようにして、V_FILEPATHの値を%temp%\%1にすると絶対パスで渡せるためお勧め。
set V_FILEPATH=%1
set V_FL=""
set V_RUNSCRIPT=""
set V_TOOLPATH=""
set V_SLEEPPATH=""
set V_CURRENTDIRECTORY=%cd%
rem 実行パスからsleepパス取得
cd /d %~dp0
cd ../
set V_TOOLPATH=%cd%
rem sleep.exeパス取得
set V_SLEEPPATH=%V_TOOLPATH%\Sleep\sleep.exe
if not exist %V_SLEEPPATH% call :ERR "sleep.exe is not exist"
rem カレントディレクトリへ移動
cd %V_CURRENTDIRECTORY%
rem プログレスバー処理開始
:LOOP
call :TAIL %1%
set RUNSCRIPT=%V_FL%
set /p script="%RUNSCRIPT% | "< nul
:PROGRESS
set /p x="#"< nul
rem ping 1.0.0.0 -w 500 -n 1 > nul
rem timeout /t 1 > nul
call %V_SLEEPPATH% -m 500
call :TAIL %1%
if %RUNSCRIPT% neq %V_FL% goto :LOOPCONTINUE
if "%V_FL%" == "Done" goto :DONE
goto :PROGRESS
:LOOPCONTINUE
echo.
if "%V_FL%" == "Done" goto :DONE
goto :LOOP
rem サブルーチン:テキストファイル最終行取得 グローバル変数V_FL
:TAIL
for /F "TOKENS=1" %%s in (%V_FILEPATH%) do set V_FL=%%s
exit /b
rem 終了
:DONE
echo.
echo Done.
pause
exit 0
rem エラー
:ERR
cd /d %V_CURRENTDIRECTORY%
echo ERR %~1
pause
exit 0
echo "実行中の処理~" >> progress.txt
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile("c:\tool\progress.txt", 8, True)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
objFile.WriteLine & "実行中の処理~"
End If
objFile.Close
Set objFile = Nothing
Set objFso = Nothing
Reference
이 문제에 관하여(명령 프롬프트에서 진행률 막대를 재현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wakisuke/items/54b83b02d387bdc57546텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)