2017-05-04 22 views
0

我正在尋找一個簡短的.bat腳本,它可以拉出部分文件名並將其設置爲變量。該文件的名稱將始終如一地爲以下結構,在一個時間但有可能超過1文件:將部分文件名稱拉爲變量

B06XTJ8RX3.MAIN.PC_430.jpg

B06XTJ8RX3.MRG1 .PC_430.jpg

儘管可能有多個文件,但前10個字符將是相同的。

我想命名'B06XTJ8RX3'作爲變量。到目前爲止,我只能通過將文件名寫入第一個''來完成此操作。插入文本文檔,然後拉取文本文件的內容,刪除重複的字符串。所有這些似乎都沒有必要。

set images=C:\file_path\images\ 

for /F "tokens=1 delims=." %%A IN ('dir /b %images%') do echo %%A >> dupes.txt 

type NUL > asins.txt 

for /F %%i in ('type dupes.txt ^| sort') Do (

If NOT "!prev!" == "%%i" (echo %%i>>asins.txt) 
set prev=%%i 
) 

type NUL > dupes.txt 
set prev=5000 

有沒有人有一個簡單的解決方案呢?

回答

1
for /f "tokens=2delims==" %%x in (`set # 2^>nul`) do set "%%x=" 
set images=C:\file_path\images\ 

for /F "tokens=1 delims=." %%A IN ('dir /b %images%') do set /a "#%%A"+=1 

set # 

應報告

#B06XTJ8RX3 = 2

對於上述文件名(#firstelement =事件)

在第一行中的for /f旨在以除去所有變量從環境開始#

檢測到每個字符串後,增加找到的#string的計數。

for /f "tokens=1,2delims==" %%x in (`set # 2^>nul`) do if "%%y" neq 1 echo %%x 

應報告每個名稱與多個找到的文件。


如果你保證,在目錄中的n個文件中,前10個字符都將是相同的,11日將是.(因此不存在不適合這種模式的文件),然後

set images=C:\file_path\images\ 
set /a count=0 
for /F "tokens=1 delims=." %%A IN ('dir /b /a-d %images%') do set "name=%%A"&set/a count+=1 

echo the %count% files start "%name%" 

使用/a-d開關關閉目錄名稱,如果它們存在。

  • 把它們算作免費獎金。
+0

我意識到我的問題是缺少一些信息(我做了編輯)。文件的數量將是未知的。但是,所有文件將具有相同的前10個字符。我需要的是一個.bat腳本來簡單地修剪最後12個字符,在這個例子中保留我的變量= B06XTJ8RX3。 – Garrett

+0

美麗 - 這最後一點有效。如果你有一分鐘​​,你會解釋%name%變量是如何工作的?這是一個標準變量嗎? – Garrett

+0

'name'不是一個神奇的變量名 - 它可能是'zphhrodh6d',如果這在你的應用程序中有任何意義。'dir'提供'/ b'(基本)形式的文件名列表 - 只有名稱'/ a-d'沒有目錄名。 'FOR/f'分析列表,'tokens = 1'將第一個標記傳遞給'%% A'(指定的*變量*(標記= 1是默認值並且是冗餘的),'delims = .'意味着行使用'.'進行「標記化」,因此該行所需的部分(直到點)出現在'%% A'中,然後將其設置爲用戶變量(名稱無關),其中引號分隔 – Magoo