iT邦幫忙

2

CMD可以執行命令,另存成BAT檔執行卻不行

ACE 2024-07-02 15:19:032118 瀏覽
  • 分享至 

  • xImage

小弟我想要設定一個自動排程每小時自動從A資料夾搬運到掛載網路磁碟區的B資料夾
原本打算做成BAT檔然後設定工作排成器每小時執行
語法如下
set source_folder=D:\A
set destination_folder=\192.168.100.25\網路磁碟\B資料夾
copy "%source_folder%*.txt" "%destination_folder%"

網路磁碟已掛載好了,直接複製到CMD上也可以執行
但只要存成bat檔,就無法運行了?
請問這是什麼原因呢

看更多先前的討論...收起先前的討論...
中文字問題
中文字問題+1。我記得好像可以雙引號或是調整檔案的編碼處理。
不太確定
BKY iT邦好手 1 級 ‧ 2024-07-03 07:56:48 檢舉
可以在最後一行加上pause
執行bat之後看錯誤訊息是什麼
修正到可以正常執行之後再把pause拿掉
chcp 65001
先執行這個,如果是因為中文問題
但如果是特權階段,為BAT檔案建立一個捷徑,然後在捷徑的進階內容,選擇使用系統管理員權限
之後你點這個捷徑就會用系統管理員去跑那個BAT,如果你希望BAT可以取得特權,請自己找一下相關指令
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2024-07-06 16:53:30
最佳解答

替你問Claude AI

您遇到的問題很可能與批次檔(BAT)中的路徑表示有關。讓我們逐步分析並解決這個問題:

1. 網路路徑表示:
   在 BAT 檔中,網路路徑需要使用雙斜線開頭。

2. 變數使用:
   在使用變數時,確保正確地引用它們。

3. 檔案複製命令:
   使用 XCOPY 代替 COPY 可能會更可靠,特別是在處理多個檔案時。

4. 錯誤處理:
   添加一些錯誤檢查可以幫助診斷問題。

基於這些考慮,以下是修改後的 BAT 腳本:

```batch
@echo off
set "source_folder=D:\A\"
set "destination_folder=\\192.168.100.25\網路磁碟\B資料夾\"

if not exist "%source_folder%" (
    echo 來源資料夾不存在
    exit /b 1
)

if not exist "%destination_folder%" (
    echo 目標資料夾不存在或網路路徑有誤
    exit /b 1
)

xcopy "%source_folder%*.txt" "%destination_folder%" /Y /I

if errorlevel 1 (
    echo 複製過程中發生錯誤
) else (
    echo 檔案複製成功
)

pause

這個腳本做了以下改進:

  1. 使用雙斜線開始網路路徑。
  2. 為資料夾路徑添加了結尾的反斜線。
  3. 使用 XCOPY 替代 COPY。
  4. 添加了錯誤檢查來驗證來源資料夾和目標資料夾是否存在。
  5. 添加了複製操作的結果回饋。
  6. 最後添加了 pause 命令,這樣如果通過雙擊運行腳本,視窗不會立即關閉,您可以看到輸出結果。

如果這個腳本仍然無法正常工作,可能的原因包括:

  1. 權限問題:確保運行 BAT 檔的使用者對網路共享有足夠的存取權限。
  2. 網路連接:確保網路連接穩定,網路磁碟確實已經掛載。
  3. 路徑中的特殊字元:如果資料夾名稱中包含特殊字元,可能需要額外的處理。

如果問題仍然存在,您可以嘗試在腳本開頭添加 @echo on,這樣可以看到每一步的執行過程,有助於進一步診斷問題。

1
allenlwh
iT邦高手 1 級 ‧ 2024-07-02 15:24:46

我之前都是使用 SyncBackFree,提供您參考

1
supermaxfight
iT邦研究生 4 級 ‧ 2024-07-02 15:32:09

以系統管理員身分執行
robocopy不香嗎?

1
knvbhk
iT邦新手 5 級 ‧ 2024-07-02 15:33:56

我的程式如下:

   set source_folder=D:\users\knvbhk
   set destination_folder=\\server\folder
   copy %source_folder%\*.txt %destination_folder%
ACE iT邦新手 4 級 ‧ 2024-07-02 16:39:00 檢舉

你好,一樣不行

knvbhk iT邦新手 5 級 ‧ 2024-07-02 17:59:25 檢舉

我update了程式碼,你看看有沒問題,如有問題可以將error message post 上來

2
copemoe
iT邦好手 2 級 ‧ 2024-07-02 17:04:12

使用中 要注意編碼問題
最好的方式 把名稱都改成英文的
只不過 你不需要存LOG來看紀錄嗎?
只單單 異動OR定時 複製的話 滿多免費軟體都有這功能

@echo off
set source_folder=D:\02\
set destination_folder=\\192.168.200.14\Tools

copy "%source_folder%*.txt" "%destination_folder%"
2
860715
iT邦新手 1 級 ‧ 2024-07-03 08:55:56

中文問題加一行 chcp 65001

@echo off
chcp 65001
set source_f................

2
by2048
iT邦高手 1 級 ‧ 2024-07-03 09:23:24

版大寫的指令內容沒什麼問題
Bat檔指令請用notepad 存成ANSI格式後
再執行bat檔

5
meebox
iT邦新手 3 級 ‧ 2024-07-03 09:31:10

你的 bat 檔存檔時的文字編碼是哪一種?CMD 在 Windows 中文版中預設採用 Big5, 以記事本來說, 就是 ANSI。如果是其它程式碼編輯器, 大部分預設都會採用 UTF-8, 如果是 UTF-8, 就要在你的 bat 檔中開頭加上 chcp 65001 讓 CMD 切換成採用 UTF-8 編碼, 否則它會看不懂檔案中的中文字。但也要記得在 bat 檔結尾處加上 chcp 950 切換回 Big5 編碼, 避免其它指令執行處理中文出問題。

另外, 你的程式中這一行

set destination_folder=\192.168.100.25\網路磁碟\B資料夾

是不是少了一個 \

set destination_folder=\\192.168.100.25\網路磁碟\B資料夾
meebox iT邦新手 3 級 ‧ 2024-07-03 09:37:32 檢舉

你的這一行應該也少了 \

copy "%source_folder%*.txt" "%destination_folder%"

* 的前面應該加上 \

copy "%source_folder%\*.txt" "%destination_folder%"


0
waterlinksky
iT邦新手 5 級 ‧ 2024-07-07 18:59:15

中文不是問題,如果是以notepad編輯的,另存新檔時,“編碼”選用ansi字元即可。

我要發表回答

立即登入回答