我正在尝试编写一些 vba 代码,将一行代码发送到命令提示符并执行它。我已经完成了这部分,但我需要帮助才能让实际代码正常工作。
我想列出特定文件夹中所有以 .doc 文件扩展名的文件,但我想排除打印到输出文本文件中的文件名的前三个字符。 (注意:我使用 vba 是因为这是我想要输入单个 vba 宏的几个不同命令之一,并且批处理文件对我来说已被阻止,因此我想直接使用命令提示符)
以下代码有效,并给出了不带文件扩展名的文件名(即。ABC201704.doc将返回为ABC201704)
%comspec% /c for %i in (C:\Test\ABC*.doc) do @echo %~ni >> C:\Test\Output.txt
但是,我不知道如何修改它,以使其不包含前 3 个字符(即它会返回201704代替ABC201704)。任何帮助都将不胜感激!我尝试使用以下链接,但我不知道如何让它适合我的情况。
答案1
如果有人好奇的话,stackoverflow 上的几个人可以帮助我找到答案:
cmd /v:on /c "for %a in ("C:\Test\ABC*.doc") do set docname=%~na & echo !docname:~3! >> C:\Test\Output.txt"
答案2
我不知道如何修改它,以便它不包含前 3 个字符
使用以下批处理文件(test.cmd):
@echo off
setlocal enabledelayedexpansion
for %%i in (C:\Test\ABC*.doc) do (
set _file=%%~ni
set _file=!_file:~3!
echo !_file!
) >> C:\Test\Output.txt
endlocal
然后在您的 VBA 代码中:
%comspec% /c test.cmd
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
- 为了- 有条件地对多个文件执行命令。
- 变量- 提取变量的一部分(子字符串)。