【发布时间】:2017-03-29 14:20:44
【问题描述】:
我正在尝试创建一个名为“index”的 txt 文件,其中包含一组文件的名称列表。文件遵循相同的命名格式:01 - aaa; 02 - bbb; 03 - ccc 等,其中字母代表文件的名称。我想创建一个txt文件,名称如下:
啊啊
bbb
ccc
即删除垂直列表中的数字、连字符和扩展名,然后我可以将其复制到其他地方。
这是我目前写的代码:
@echo off & setlocal EnableDelayedExpansion
for /f "tokens=3* delims= " %%g in ('dir /b /o:n') do (
if not %%~nxg==index.bat (
echo %%g >> index.txt
)
)
endlocal
这会正确循环文件并忽略 index.bat(这是我正在运行的文件),但它仅输出第三个标记,而不是所有后续标记。 * 通配符应该意味着它输出整个字符串的其余部分,但它似乎不起作用?
如果有任何其他一般性改进,我们将不胜感激 - 只学习了一周左右的批次。
编辑:下面 Magoo 和 npocmaka 的回答解决了这个问题。 %%h 包含通配符信息。 "tokens=2* delims= " 会将第二个令牌分配给 %%g,将第三个 + 其余令牌分配给 %%h。
工作代码如下:
@echo off & setlocal EnableDelayedExpansion
for /f "tokens=2* delims= " %%g in ('dir /b /o:n') do (
if not %%~nxg==%%~nx0 (
set name=%%h
echo !name:~0,-4! >> index.txt
)
)
endlocal
if not %%~nxg==%%~nx0 将批处理文件从循环中排除,set name=%%h 创建一个新变量,以便我可以做一个子字符串来删除扩展名。 echo !name:~0,-4! 是子字符串,它选择除最后 4 个字符之外的整个字符串以排除文件扩展名,然后 >> index.txt 在同一目录中创建一个新的文本文件,其中仅包含所需的字符。
【问题讨论】:
-
*是一个单独的令牌。你可以试试echo %%g %%h -
你应该默认安装powershell,这样会容易很多!
-
@npocmaka 会输出什么。抱歉,今天远离我的电脑,所以无法检查它是如何工作的。 %%h 的值是多少?
标签: batch-file