iT邦幫忙

0

如何編寫批次檔讀取EXCEL檔紀錄的檔案位置並確認檔案是否存在

  • 分享至 

  • xImage

大家好,小弟現在有個紀錄"檔案名稱"與"檔案位置"的EXCEL檔
能否讀取此EXCEL檔並另外記錄檔案不在位置上的檔名?

例如:
檔案名稱 檔案位置
001.pdf D:\AAA
002.pdf D:\AAA
003.pdf D:\BBB

如果在D:\AAA上找不到002.pdf,就記錄002.pdf在一個文字檔上,並以此類推

懇請各位專業大大能夠給予解答
謝謝

為何不用python取代batch呢?至少在編寫難度會比batch低,且命令淺顯易懂.....

我隨風而去打醬油
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
wrxue
iT邦好手 1 級 ‧ 2021-09-07 11:24:22
最佳解答

先把 excel 另存成 csv (test.csv),內容應該如下

檔案名稱,檔案位置
001.pdf,D:\AAA
002.pdf,D:\AAA
003.pdf,D:\BBB

再用下面的 bat 去處理

@echo off
For /F "skip=1 tokens=1,2,3 delims=," %%I in (.\test.csv) do (
	if exist %%J\%%I (
		echo.%%J\%%I exists
	) else (
		echo.%%J\%%I >> not-exists.txt
	)
)

執行完 not-exists.txt 內容為

D:\AAA\001.pdf 
D:\BBB\003.pdf  

當然,如果只要檔名,那就將原始碼改為

@echo off
For /F "skip=1 tokens=1,2,3 delims=," %%I in (.\test.csv) do (
	if exist %%J\%%I (
		echo.%%J\%%I exists
	) else (
		echo.%%I >> not-exists.txt
	)
)

如果想對 excel 直接操作,建議使用 python 或其他語言,批次檔這種東西比較適合讀純文字檔案。
或者也可以先寫一個批次檔將 excel 檔案先轉為 csv,再用另一個批次檔去處理 csv。總之方法有很多,就是不想直接用批次檔操作 excel 資料。

muscat iT邦新手 5 級 ‧ 2021-09-07 23:33:58 檢舉

感謝解答!感恩!!/images/emoticon/emoticon41.gif

0
japhenchen
iT邦超人 1 級 ‧ 2021-09-07 12:08:15

如果是python
1、先把你的pdf清單存成一個txt檔
2、python內容

import os

log = list()
with open("log.txt","wt",encoding="utf-8") as logfile:
    with open("list.txt","rt") as filelist:
        for ln in filelist:
            l = ln.strip().split(' ') 
            # 整理讀進來的資料並拆成資料夾入及檔案名
            file = l[0]
            dir = l[-1]
            targfile = os.path.join(dir,file)
            if not os.path.exists(targfile):
                logfile.write(f"找不到{targfile}\n")

    

python跟batch一樣,屬直譯式語言,不需要編譯即可執行,速度快,用途更廣(你想到跟沒想到的都有)

muscat iT邦新手 5 級 ‧ 2021-09-07 23:32:09 檢舉

感謝解答!目前我尚未碰過python,想說還是以批次檔為主/images/emoticon/emoticon25.gif

別怕學習新事物~

我要發表回答

立即登入回答