如何使用 vba 调用命令行列出文件名

如何使用 vba 调用命令行列出文件名

我正在尝试编写一些 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)。任何帮助都将不胜感激!我尝试使用以下链接,但我不知道如何让它适合我的情况。

有没有办法在DOS批处理文件编程中获取文件名的前几个字符

答案1

如果有人好奇的话,stackoverflow 上的几个人可以帮助我找到答案:

cmd /v:on /c "for %a in ("C:\Test\ABC*.doc") do set docname=%~na & echo !docname:~3! >> C:\Test\Output.txt"

https://stackoverflow.com/questions/43352753/how-to-use-command-prompt-to-list-file-names-in-directory-but-exclude-1st-3-char?noredirect=1#comment73769999_43352753

答案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

进一步阅读

相关内容