Como chamar linha de comando usando vba para listar nomes de arquivos

3

Estou tentando escrever algum código vba que envie uma linha de código para o prompt de comando e o execute. Eu tenho essa parte, mas preciso de ajuda para fazer o código funcionar.

Eu quero listar todos os arquivos em uma pasta específica que são a extensão de arquivo .doc, mas quero excluir os três primeiros caracteres do nome do arquivo que são impressos no arquivo de texto de saída. (Nota: Estou usando vba porque este é um dos vários comandos diferentes que eu gostaria de obter em uma única macro vba, e arquivos em lote são bloqueados para mim, então eu gostaria de trabalhar diretamente com o prompt de comando)

O código a seguir funciona e me fornece os nomes dos arquivos sem a extensão do arquivo (ou seja, ABC201704.doc retornará como ABC201704 )

%comspec% /c for %i in (C:\Test\ABC*.doc) do @echo %~ni >> C:\Test\Output.txt

No entanto, não sei como modificar isso para que não inclua os 3 primeiros caracteres (ou seja, retornaria 201704 em vez de ABC201704 ) . Qualquer ajuda seria muito apreciada! Tentei usar o link a seguir, mas não consegui descobrir como fazer isso funcionar na minha situação.

Qualquer forma de obter os primeiros caracteres do nome do arquivo na programação de arquivos em lote do DOS

    
por ampsoccer17 11.04.2017 / 18:41

2 respostas

2

Algumas pessoas no stackoverflow conseguiram ajudar-me a obter a minha resposta se alguém tiver curiosidade:

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

link

    
por 11.04.2017 / 20:46
0

Eu não sei como modificar isso para que não inclua os 3 primeiros caracteres

Use o seguinte arquivo de lote (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

Em seguida, no seu código VBA:

%comspec% /c test.cmd

Leitura Adicional

por 11.04.2017 / 19:28