Як зателефонувати в командному рядку за допомогою vba для переліку імен файлів


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

Кілька людей, які перебувають у стаковому потоці, змогли допомогти мені отримати відповідь, якщо хтось цікавий:

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

Подальше читання

  • Індекс AZ командного рядка Windows CMD - відмінна довідка для всіх речей, що стосуються cmd-лінії Windows.
  • enabledelayedexpansion - затримка розширення призведе до розширення змінних на час виконання, а не на час розбору.
  • для - Умовно виконуйте команду на декількох файлах.
  • змінні - Вилучення частини змінної (підрядка).

На жаль, це, здається, не працювало для мене. Вікно cmd швидко спливає і зникає так, ніби воно фактично не виконало код. Пакетні файли заблоковані в моїй системі, так що це може мати щось спільне з цим.
ampsoccer17

@ ampsoccer17 Спробуйте %comspec% /k test.cmdзамість цього
DavidPostill

Я змінив код vba на C: \ Test \ test.cmd і вирішив цю проблему, але повернув мене до мого першого випуску, що пакетні файли заблоковані у моїй системі, тому він не міг працювати.
ampsoccer17
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.