iT邦幫忙

0

bat批次檔, 如何抓取檔名 與 定義檔名給zip檔案使用呢?

您好,
我目前用指令 7z a -tzip "MD_.zip" "MD*.txt"
可以將資料夾內所有的MD_*_*_*_*_*_*1_*_*_*.txt檔案只壓成一個MD_.zip檔.

但檔名不是我要的, 需要指定檔名, 請問要如何由MD_*_*_*_*_*_*1_*_*_*.txt檔名, 抓取所需的文字與修改呢?
然後把抓取出來的這一串文字放入, 我想要壓縮的名稱呢?

MD_P517D005_025_S11P_X2652B00011_10_031_MBIST_20150619_095006.txt
怎麼取出與變成下列字串
MD_P517D005_S11P_20150619095006

或是抓取檔名可以使用vba另外執行呢?
各位 哥 姊 我的手腕韌帶靠你們了.

slime iT邦大師 1 級 ‧ 2015-06-22 11:30:20 檢舉
1. 用 help for 可以看到說明, 您要的功能大約流程是:

a. 用 for 取清單, 把清單名稱另外存起來.
b. 把清單名稱以 token=_ , 用底線把名稱切割, 就會變成多個變數, MD, P517D005, 025, S11P, X2652B00011, 10, 031, MBIST, 20150619, 095006.txt
c. 除了最後一個 095006.txt 外, 其他的可以用變數重新排列.
b+c. 如果檔名長度都不變, 也可以用變數取特定位置, 如 %f:0,11%_ 來抓.

2. 壓縮指定路徑, 壓縮軟體都可以達成.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
s906362000
iT邦新手 5 級 ‧ 2015-06-22 22:43:58
最佳解答

我重新命名的方法都是
1.先把檔案名稱用echo新增文字檔案
2.再從新增的文字檔裡面抓字串回到批次檔裡面
3.做字串處理然後在另存新檔
4.把原本的檔案殺掉
指令的話因為太久沒用了,可以上網搜尋關鍵字"批次檔 字串處理"
就會有教學。

然後壓縮我是用ZIP,在cmd下打-help或/?他會跟你說要怎麼用
下面是zip指定路徑的範例,代碼因該跟7z不太一樣
WinRAR.exe a -r -m3 -T "C:\%today%_DATA.rar" "C:\Outxls"

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

幫幫我吧 我還是不太懂 有機會寫出一個讓我試試看嗎?

先想辦法把檔名丟到str
範例
set str="0123456789"
set str1="str:~0,3"
rem str1="012"
(從第一個字開始往後算,總共取三個字)
set str2="str:~5,3"
rem str2="456"
set str3="str:~9,2"
rem str3="89"

set rst=%str1%%str2%@str3@
rem rst="01245689"

winzip (指令) "C:\old.txt"(原始檔案路徑) "C:\%rst%.zip"(指定壓縮檔案名稱和路徑)

因為小弟經驗也不多,只能跟您分享我的經驗到這裡,剩下只能靠您自己或其他前輩指點是否有更好的方法了。

您在做測試的時候,可以用echo %rst1%,看看是否是自己真正要抓的字串

cancelpc iT邦新手 3 級 ‧ 2018-05-07 15:13:25 檢舉

'''

@echo off
setlocal

set FN=
for /f "tokens=" %%a in ('dir /b "MD_*_*1_**.txt"') do set FN=%%a
echo %FN%

rem a b c d e f g h i j
rem MD P517D005 025 S11P X2652B00011 10 031 MBIST 20150619 095006
rem MD_P517D005_S11P_20150619095006
for /f "tokens=1-10 delims=." %%a in ("%FN%") do set FN=%%a%%b_%%d_%%i%%j
echo %FN%

endlocal

'''

我要發表回答

立即登入回答