我正在尝试创建一个名为“index”的txt文件,其中包含一组文件名称列表。文件遵循相同的命名格式:01 - aaa; 02 - bbb; 03 - ccc等,其中字母代表文件的名称。我想创建一个名称如下的txt文件:
AAA
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
在同一目录中创建一个只包含所需字符的新文本文件。
答案 0 :(得分:0)
在您的代码中,%%h
将包含该行的其余部分。
当tokens=2*
包含第3个及以后的代币时,您可以考虑更改为%%h
。
您可能希望将/a-d
添加到dir
中,以忽略遇到的任何目录名。
答案 1 :(得分:0)
这对我有用,只需改变:
"tokens=2* delims=-"
如果你只能使用预先安装的应用程序,这是一个很好的PowerShell单线程:
gci C:\folder -Exclude "index" | % {($_ -split "-")[1]} | out-file C:\index.txt
可能需要根据您的需要进行修改。