3

Я пытаюсь написать некоторый код 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

2 ответа2

2

Несколько человек на 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

0

Я не знаю, как изменить это так, чтобы он не включал первые 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

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .