魔女喰い(裏メモ) https://otspace.stores.jp/items/5d3a42973a7e964d4a66924c @stores_jp
【署名のお願い】自然エネルギー100%と原発の段階的廃止を実現するため「エネルギー基本計画」を変えよう!

note.mu徒然なるままに

ファイル一覧取得のFListを使ってみた

Vector FLIST 詳細情報
処理時間ロジックはこのサイトからコピりました。(suz-lab) <(..)>

やりたいこと:
共有フォルダにあるファイルのフルパスをGETする
アクセスしているファイル一覧(フルパス)からアクセスしていないファイル一覧を抜き出す
アクセスしていないファイル一覧のトータルサイズを取得する
FLISTがファイルのみのフルパス一覧を取得してくれないのでちょぴっと面倒なことになってます。っていうか、いまさらだけどフォルダを除外する必要はなさそうだと思った。

(こんなことしなくってもフリーのツールがあるよ。もしくは、こっちの方が処理早いぜを募集します♪)
※バッチにてマッチングさせているけど、Databaseにインポートしてマッチングさせたほうが早いぜ!きっとな(^ー^;

現在、うまく動作しないっぽいので誠意修正中w

作ったバッチ
・共有フォルダのTOPフォルダを抽出するバッチ
disk 処理時間ログOUTファイル名 処理結果OUTファイル名 サーバー名

@echo off
setlocal  
rem 開始時間の取得
set b_disk_time=%time%
set b_disk_result=%b_disk_time:~9,2%
set /a b_disk_result=b_disk_result+%b_disk_time:~6,2%*100
set /a b_disk_result=b_disk_result+%b_disk_time:~3,2%*6000
set /a b_disk_result=b_disk_result+%b_disk_time:~0,2%*360000
cd c:\log\
set logfile=%1
set outfile=%2
set server=%3
IF "%server%" EQU "" (
  GOTO :NOT_FOUND
)
net view %server% > disk.txt
IF NOT EXIST "disk.txt" (
  GOTO :NOT_FOUND
)
IF EXIST "%outfile%" (
  DEL %outfile%
)
FOR /F "delims=" %%a IN (disk.txt) DO (
  CALL :DISK_NAME %outfile% %%a
)
DEL disk.txt
GOTO :END
:DISK_NAME
SET outfile=%1
SET disk=%2
ECHO %name%>>%outfile%
)
EXIT /B
:NOT_FOUND
  echo disk logfile outfile server
  GOTO :END
:END
rem 終了時間の取得
set e_disk_time=%time%
set e_disk_result=%e_disk_time:~9,2%
set /a e_disk_result=e_disk_result+%e_disk_time:~6,2%*100
set /a e_disk_result=e_disk_result+%e_disk_time:~3,2%*6000
set /a e_disk_result=e_disk_result+%e_disk_time:~0,2%*360000
rem 実行時間の取得
set /a disk_diff=e_disk_result-b_disk_result
echo disk実行時間:%disk_diff%>>%logfile%
endlocal 

・共有フォルダのサブフォルダを抽出するバッチ(FLIST使用)

folder 処理時間ログOUTファイル名 共有TOPフォルダ一覧ファイル名 処理結果OUTファイル名 サーバー名

@echo off
setlocal 
rem 開始時間の取得
set b_folder_time=%time%
set b_folder_result=%b_folder_time:~9,2%
set /a b_folder_result=b_folder_result+%b_folder_time:~6,2%*100
set /a b_folder_result=b_folder_result+%b_folder_time:~3,2%*6000
set /a b_folder_result=b_folder_result+%b_folder_time:~0,2%*360000
cd c:\log\
set logfile=%1
set infile=%2
set outfile=%3
set server=%4
IF NOT EXIST "%infile%" (
  GOTO :NOT_FOUND
)
IF "%server%" EQU "" (
  GOTO :NOT_FOUND
)
IF EXIST "%outfile%" (
  DEL %outfile%
)
FOR /F "delims=" %%a IN (%infile%) DO (
  CALL :GET_FOLDER %%a %outfile% %server%
)
GOTO :END
:GET_FOLDER
SET name=%1
SET outfile=%2
SET server=%3
FList /d /bf /h /s \\%server%\%name% >> %outfile%
)
EXIT /B
:NOT_FOUND
  echo folder logfile infile outfile server
  GOTO :END
:END
rem 終了時間の取得
set e_folder_time=%time%
set e_folder_result=%e_folder_time:~9,2%
set /a e_folder_result=e_folder_result+%e_folder_time:~6,2%*100
set /a e_folder_result=e_folder_result+%e_folder_time:~3,2%*6000
set /a e_folder_result=e_folder_result+%e_folder_time:~0,2%*360000
rem 実行時間の取得
set /a folder_diff=e_folder_result-b_folder_result
echo folder実行時間:%folder_diff%>>%logfile%
endlocal 


・共有フォルダの全てのファイルとフォルダを抽出するバッチ(FLIST使用)
file  処理時間ログOUTファイル名 共有TOPフォルダ一覧ファイル名 処理結果OUTファイル名 サーバー名

@echo off
setlocal 
rem 開始時間の取得
set b_file_time=%time%
set b_file_result=%b_file_time:~9,2%
set /a b_file_result=b_file_result+%b_file_time:~6,2%*100
set /a b_file_result=b_file_result+%b_file_time:~3,2%*6000
set /a b_file_result=b_file_result+%b_file_time:~0,2%*360000
cd c:\log\
set logfile=%1
set infile=%2
set outfile=%3
set server=%4
IF NOT EXIST "%infile%" (
  GOTO :NOT_FOUND
)
IF "%server%" EQU "" (
  GOTO :NOT_FOUND
)
IF EXIST "%outfile%" (
  DEL %outfile%
)
FOR /F "delims=" %%a IN (%infile%) DO (
  CALL :GET_FILE %%a %outfile% %server%
)
GOTO :END
:GET_FILE
SET name=%1
SET outfile=%2
SET server=%3
FList /a /bf /h /s \\%server%\%name% >> %outfile%
)
EXIT /B
:NOT_FOUND
  echo file logfile infile outfile server
  GOTO :END
:END
rem 終了時間の取得
set e_file_time=%time%
set e_file_result=%e_file_time:~9,2%
set /a e_file_result=e_file_result+%e_file_time:~6,2%*100
set /a e_file_result=e_file_result+%e_file_time:~3,2%*6000
set /a e_file_result=e_file_result+%e_file_time:~0,2%*360000
rem 実行時間の取得
set /a file_diff=e_file_result-b_file_result
echo file実行時間:%file_diff%>>%logfile%
endlocal 


・全てのファイルとフォルダ情報からフォルダ情報を抜き出すバッチ

fileonly  処理時間ログOUTファイル名 フォルダ一覧ファイル名 ファイルとフォルダ一覧ファイル名 処理結果OUTファイル名

@echo off
setlocal 
rem 開始時間の取得
set b_fileonly_time=%time%
set b_fileonly_result=%b_fileonly_time:~9,2%
set /a b_fileonly_result=b_fileonly_result+%b_fileonly_time:~6,2%*100
set /a b_fileonly_result=b_fileonly_result+%b_fileonly_time:~3,2%*6000
set /a b_fileonly_result=b_fileonly_result+%b_fileonly_time:~0,2%*360000
cd c:\log\
set logfile=%1
set checkfile=%2
set infile=%3
set outfile=%4
IF NOT EXIST "%infile%" (
  GOTO :FILE_NOT_FOUND
)
IF NOT EXIST "%checkfile%" (
  GOTO :FILE_NOT_FOUND
)
IF EXIST "%outfile%" (
  DEL %outfile%
)
FOR /F "delims=" %%a IN (%infile%) DO (
  CALL :FIND_NONFOLDER "%%a" %checkfile% %outfile%
)
GOTO :END
:FIND_NONFOLDER
SET data=%1
SET checkfile=%2
SET outfile=%3
for /f "tokens=3 delims= " %%z in ('FIND /C %data% %checkfile%') do (
  @SET COUNT1=%%z
)
IF "0" EQU "%COUNT1%" (
  @ECHO %1>>%outfile%
)
EXIT /B
:FILE_NOT_FOUND
  fileonly logfile checkfile infile outfile
  GOTO :END
:END
rem 終了時間の取得
set e_fileonly_time=%time%
set e_fileonly_result=%e_fileonly_time:~9,2%
set /a e_fileonly_result=e_fileonly_result+%e_fileonly_time:~6,2%*100
set /a e_fileonly_result=e_fileonly_result+%e_fileonly_time:~3,2%*6000
set /a e_fileonly_result=e_fileonly_result+%e_fileonly_time:~0,2%*360000
rem 実行時間の取得
set /a fileonly_diff=e_fileonly_result-b_fileonly_result
echo fileonly実行時間:%fileonly_diff%>>%logfile%
endlocal 


・メインバッチ
@echo off
setlocal 
rem 開始時間の取得
set b_time=%time%
set b_result=%b_time:~9,2%
set /a b_result=b_result+%b_time:~6,2%*100
set /a b_result=b_result+%b_time:~3,2%*6000
set /a b_result=b_result+%b_time:~0,2%*360000
cd c:\log\
set logfile=log.txt
set diskname=diskname.txt
set folder=folder.txt
set file=file.txt
set server=server_name
set fileonly=fileonly.txt
echo %date% %time% > %logfile%
CALL disk %logfile% %diskname% %server%
CALL folder %logfile% %diskname% %folder% %server%
CALL file %logfile% %diskname% %file% %server%
DEL %diskname%
CALL fileonly %logfile% %folder% %file% %fileonly%
DEL %folder%
DEL %file%
rem 終了時間の取得
set e_time=%time%
set e_result=%e_time:~9,2%
set /a e_result=e_result+%e_time:~6,2%*100
set /a e_result=e_result+%e_time:~3,2%*6000
set /a e_result=e_result+%e_time:~0,2%*360000
rem 実行時間の取得
set /a diff=e_result-b_result
echo total実行時間:%diff%>>logfile.txt
echo: >> %logfile%
echo: >> %logfile%
echo %date% %time% >> %logfile%
endlocal 
EXIT

蛇足:
・ファイルのアクセス履歴(フルパス)からアクセスしていないファイルの抽出バッチ(研究中)
nonaccess 処理時間ログOUTファイル名 チェックするファイル一覧ファイル名 アクセスファイル一覧ファイル名 処理結果OUTファイル名 
@echo off
setlocal
rem 開始時間の取得
set b_nonaccess_time=%time%
set b_nonaccess_result=%b_nonaccess_time:~9,2%
set /a b_nonaccess_result=b_nonaccess_result+%b_nonaccess_time:~6,2%*100
set /a b_nonaccess_result=b_nonaccess_result+%b_nonaccess_time:~3,2%*6000
set /a b_nonaccess_result=b_nonaccess_result+%b_nonaccess_time:~0,2%*360000
cd c:\log\
set logfile=%1
set checkfile=%2
set access=%3
set nonaccess=%4
IF NOT EXIST "%access%" (
  GOTO :FILE_NOT_FOUND
)
IF NOT EXIST "%checkfile%" (
  GOTO :FILE_NOT_FOUND
)
IF EXIST "%nonaccess%" (
  DEL %nonaccess%
)
FOR /F "delims=" %%a IN (%checkfile%) DO (
  CALL :FIND_NONFILE %%a %access% %nonaccess%
)
GOTO :END
:FIND_NONFILE
SET file=%1
SET access=%2
SET nonaccess=%3
for /f "tokens=3 delims= " %%z in ('FIND /C %file% %access%') do (
  @SET COUNT2=%%z
)
IF "0" EQU "%COUNT2%" (
  @ECHO %1>>%nonaccess%
)
EXIT /B
:FILE_NOT_FOUND
  GOTO :END
:END
rem 終了時間の取得
set e_nonaccess_time=%time%
set e_nonaccess_result=%e_nonaccess_time:~9,2%
set /a e_nonaccess_result=e_nonaccess_result+%e_nonaccess_time:~6,2%*100
set /a e_nonaccess_result=e_nonaccess_result+%e_nonaccess_time:~3,2%*6000
set /a e_nonaccess_result=e_nonaccess_result+%e_nonaccess_time:~0,2%*360000
rem 実行時間の取得
set /a nonaccess_diff=e_nonaccess_result-b_nonaccess_result
echo nonaccess実行時間:%nonaccess_diff%>>%logfile%
endlocal

・ファイル一覧の総ファイルバイト取得バッチ
filesize 処理時間ログOUTファイル名 サイズを取得するファイル一覧ファイル名
@echo off
setlocal
rem 開始時間の取得
set b_filesize_time=%time%
set b_filesize_result=%b_filesize_time:~9,2%
set /a b_filesize_result=b_filesize_result+%b_filesize_time:~6,2%*100
set /a b_filesize_result=b_filesize_result+%b_filesize_time:~3,2%*6000
set /a b_filesize_result=b_filesize_result+%b_filesize_time:~0,2%*360000
cd c:\log\
set logfile=%1
set checkfile=%2
set size=0
FOR /F "delims=" %%a IN (%checkfile%) DO (
  CALL :FIND_NONFILE %%a
)
ECHO total: %size% byte>>%logfile%
GOTO :END
:FIND_NONFILE
SET file=%~1 
SET /a size=size+%%~zfile
EXIT /B
:FILE_NOT_FOUND
  GOTO :END
:END
rem 終了時間の取得
set e_filesize_time=%time%
set e_filesize_result=%e_filesize_time:~9,2%
set /a e_filesize_result=e_filesize_result+%e_filesize_time:~6,2%*100
set /a e_filesize_result=e_filesize_result+%e_filesize_time:~3,2%*6000
set /a e_filesize_result=e_filesize_result+%e_filesize_time:~0,2%*360000
rem 実行時間の取得
set /a filesize_diff=e_filesize_result-b_filesize_result
echo nonaccess実行時間:%filesize_diff%>>%logfile%
endlocal

コメント

人気の投稿

Hot Trends

Wikipedia

検索結果