2017-05-04 67 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

相关问题