iT邦幫忙

0

cmd存成檔案之後無法執行

  • 分享至 

  • xImage
ping -t 192.168.1.1|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 192.168.1.1>nul" >C:\1.txt

執行之後會存在C碟 這是一段可以紀錄ping的時間 檔名為1.txt 會顯示這樣
https://ithelp.ithome.com.tw/upload/images/20230606/20122928davT2iWcxH.png

但是如果存檔成.cmd檔案還是.bat檔案,然後再執行就會出現。
https://ithelp.ithome.com.tw/upload/images/20230606/201229288YjgteNrUe.png

不知道這個要怎麼改,才可以存檔成.cmd還是.bat,方便可以直接執行就好。

ping -t 192.168.1.1|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 192.168.1.1>nul" >1.txt
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
柯柯
iT邦新手 2 級 ‧ 2023-06-06 10:10:16

改成這樣

ping -t 192.168.1.1 | cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 192.168.1.1 >nul)" >C:\1.txt

變數要用 %%a
另外開啟時要注意有沒有權限可以寫入

看更多先前的回應...收起先前的回應...

是可以用了,但...要在執行第二個,就出現錯誤了...
程序無法存取檔案,因為檔案正在由另一個程序使用。
https://ithelp.ithome.com.tw/upload/images/20230606/20122928lsU3gV3pCc.png

柯柯 iT邦新手 2 級 ‧ 2023-06-06 10:50:00 檢舉

可能要看一下 是不是有其他程式在使用你寫入的那隻文字檔
你是有其他程式在同時抓取該檔案嗎

沒有耶 如果照我原本的那個指令,我cmd多開 一個一個貼上去
好像無解QQ 我是想要ping很多台 然後有一個紀錄

柯柯 iT邦新手 2 級 ‧ 2023-06-06 11:31:09 檢舉

剛剛測試 多增加一個檔案
t.cmd => 192.168.1.1
t2.cmd => 192.168.1.2

All.cmd

start cmd /k C:/t.cmd & 
start cmd /k C:/t2.cmd

這樣會跟你一樣出現 檔案正在使用 但 txt 輸出是正常的 這個 我就不太知道是甚麼關係了 不過這樣應該可以一次ping 多個
只是cmd檔要個別創立 可能看有沒有其他大神有更好的方法

1
re.Zero
iT邦研究生 5 級 ‧ 2023-06-06 23:40:56

我是不太喜歡用 Batch-script 搞密集的查詢行為啦……
(雖說我很久沒碰了~ 但這種事務不是一堆效率不錯的小程式可用?)
以下隨便寫的 .bat 檔案內容:
(主要參考這裡)

@echo off
rem ## This is [aDemo.cmd];
setlocal EnableDelayedExpansion
rem ## 
set "myDestIP=%~1"
set "myLog01Path=%~2"
if not defined myDestIP @(
    echo IP? File-Path?
    goto :EOF
)
if not defined myLog01Path @(
    echo File-Path?
    goto :EOF
)
set "myFindStr=TTL="
set "myDelay=2"
rem ## 
set "myTitle=ping [%myDestIP%] and save as [%myLog01Path%];"
title %myTitle%
echo %myTitle%
type nul >"%myLog01Path%"
for /l %%i in (1,0,2) do @echo. | cmd /v:on /c (>>"%myLog01Path%" set /p"z=!date! !time! : ")&(ping -n 1 "%myDestIP%" | find "%myFindStr%" >>"%myLog01Path%")&&(timeout /t %myDelay% > nul)
rem ## 

.bat 檔案內需自訂的變數說明:
(若想從 script 呼叫參數 (例如%1之類) 上使用請自改。)

  • myFindStr : 想丟入記錄檔內的單行字串之尋找用關鍵字。
    (例如: Reply from 或者 回覆自 )
  • myDelay : 每個 ping 之間的間隔時間。

我的使用方式: 開啟 4 個 cmd.exe 呼叫 aDemo.cmd

start cmd /k (".\aDemo.cmd" "127.0.0.1" ".\myLog01.txt")
start cmd /k (".\aDemo.cmd" "127.0.0.1" ".\myLog02.txt")
start cmd /k (".\aDemo.cmd" "127.0.0.1" ".\myLog03.txt")
start cmd /k (".\aDemo.cmd" "127.0.0.1" ".\myLog04.txt")
0
sam0407
iT邦大師 1 級 ‧ 2023-06-07 16:53:39

班門弄斧~~之前幫我們家小朋友要長期監控某台主機網路狀況時寫的

@Echo off
if "%1" == "" goto :Exit

:Loop
date /T >> .\Ping_%1.log
time /T >> .\Ping_%1.log
ping %1 -n 100 >> .\Ping_%1.log
goto :Loop

:Exit
echo Usage:PingServer [ServerIP]

後來小朋友反映,螢幕上沒顯示,要去看Log檔太麻煩,就改了第二版

@Echo off
if "%1" == "" goto :Exit

:Loop
date /T |tee -a .\Ping_%1.log
time /T |tee -a .\Ping_%1.log
ping %1 -n 100 |tee -a .\Ping_%1.log
goto :Loop

:Exit
echo Usage:PingServer [ServerIP]

tee這支程式您可以搜尋tee for windows來取得

re.Zero iT邦研究生 5 級 ‧ 2023-06-07 20:08:04 檢舉

看到你的分享, 我忽然發現, 我幹嘛順著發問者的寫法下去寫另一種令後來的我傻眼的腳本…… 看到我呼叫一堆 cmd.exe 就讓我感嘆當時的我是發神經喔…… Orz

sam0407 iT邦大師 1 級 ‧ 2023-06-08 10:33:23 檢舉

re.Zero
您只是熱心的想解決邦友問題而已,很正常啦~~

而我是看到原PO現有的那段指令就頭痛,剛好先前有寫過現成的類似的功能,拿出來野人獻曝一下,您寫的Script很讚,比我強太多了!

我要發表回答

立即登入回答