各位大師好
因為常常有user反應別人開啟他的檔案,他就只能以唯讀方式開啟,不能修改,那我就只能連線到主機看共用檔案那邊是誰開的,看情況直接關掉或是跟user說她們自己處理。
請問有方法可以讓他們直接看到共用台的檔案是誰在開啟嗎?
感謝 michaelwan && 微和的風 的意見 我做了以下的小批次檔
先抓所有共用檔 然後再只抓某個資料夾的共用檔
@echo off
@echo 產生共用檔案使用表...
openfiles /Query /FO table > D:\123.txt
findstr "SWAP" "D:\123.txt" > D:\RD\DRV\TEMP\共用檔案使用表.txt
rem pause
後記:主管覺得我主機每分鐘執行一次對主機LOADONG太重,就不用這方式了。
後後記: 使用蟹老闆大大方式 感謝!! 不過user按一次要等1分多......應該會被嫌棄orz
這個操作負載太重?是伺服器效能太差?
好吧那就當使用者有需求時自行查詢吧!
批次檔分為伺服器端及使用者端
伺服器端
@Echo Off
Cls
Fsutil File Layout c:\windows\Explorer.exe>Nul 2>Nul||(Echo.&Echo.&Echo 注意!動作未完成,請用右鍵以系統管理員身分執行&Echo.&Echo.&Echo.&Echo.&Pause&Exit)
Mode Con Cols=30 Lines=20
Title 檔案開啟查詢程式
Color F6
::Log變數需輸入完整路徑及檔名
Set Log=D:\RD\DRV\TEMP\共用檔案使用表.txt
Echo.&Echo.&Echo.&Echo.&Echo 等待查詢中請勿關閉^!^!^!
:Loop
WaitFor QueryShareFile
Del /q "%Log%" 0 1 2>Nul
For /f "Tokens=*" %%i in ('openfiles /Query /FO table^|findstr SWAP') Do Echo %%i>>"%Log%"
If Not Exist "%Log%" Echo 沒有已開啟的檔案>>"%Log%"
Echo 最後查詢時間:%Time%
Goto :Loop
使用者端
@Echo Off
Cls
::Server變數輸入IP位置或主機名稱
Set Server=192.168.0.15
Set Wait=1
Set OutFile=\\共用主機\共用檔案使用表.txt
WaitFor /S %Server% /SI QueryShareFile
TimeOut /T %Wait%
If Exist "%OutFile%" (Cmd /C "Start Notepad "%OutFile%"") Else (mshta "vbscript:msgbox("檔案無法讀取,請與系統管理員連繫",0,"發生錯誤") & window.close")
Ping /n 1 /w 1000 9.9.9.9>Nul
Del /q "%OutFile%" 0 1 2>Nul
變數說明:
1.Log 查詢結果存檔,檔案位置需存於共用資料夾中
2.Server 主機IP或名稱
3.Wait 使用者若發生檔案開啟錯誤時增加此數字(供效能太差使用)
4.OutFile 與 Server 端 Log 變數相對應的共用位置
使用說明:
伺服器端請以系統管理者身份執行
Server 批次檔修改成正確存檔位置後執行該批次檔
Client 當有需要時執行該批次檔
僅在本機電腦測試,請先自行驗證可行性
您好,
Fsutil File Layout c:\windows\Explorer.exe
他說是無效的指令 Fsutil File 下面沒有Layout ,請問這是要額外下載套件?
那行應該只是判斷是不是用管理員權限開啟嗎? 我拿行先REM掉就都正常了! 非常感謝您!
題外話: 主機一年前買的 也都很穩定 我執行那個批次時也都很正常 我也不知為啥主管叫我拿掉= =
Fsutil 執行檔必須是10.0.1734.1 Windows 10可透過系統更新取得,或是改用以下命令
@Echo Off
Cls
Md "%Hosts%\MdTest" 2>nul&&Rd "%Hosts%\MdTest" >nul 2>nul||(Echo.&Echo 注意:指令不成功!!&Echo 注意!動作未完成,請用右鍵以系統管理員身分執行&Echo.&Echo.&Echo.&Echo.&Pause&Exit)
Mode Con Cols=30 Lines=20
Title 檔案開啟查詢程式
Color F6
::Log變數需輸入完整路徑及檔名
Set Log=D:\RD\DRV\TEMP\共用檔案使用表.txt
Echo.&Echo.&Echo.&Echo.&Echo 等待查詢中請勿關閉^!^!^!
:Loop
WaitFor QueryShareFile
Del /q "%Log%" 0 1 2>Nul
For /f "Tokens=*" %%i in ('openfiles /Query /FO table^|findstr SWAP') Do Echo %%i>>"%Log%"
If Not Exist "%Log%" Echo 沒有已開啟的檔案>>"%Log%"
Echo 最後查詢時間:%Time%
Goto :Loop
我猜主管可能沒有真的去了解,執行你的批次檔耗用多少資源才會這麼說.
另外請問一下 要等大概70秒是正常的嗎?
應該不用這麼久,那個等待1是指1秒.
會這麼久有可能是與伺服器等待連接的時間,本機測試時立即反應
另外如果伺服器的等待視窗有用滑鼠點到命令列(會有一小塊反白)時批次檔會暫停執行,除非按下enter鍵才會繼續
了解! 謝謝
Share Point的檔案共享是你的好朋友