1

Я пытаюсь получить имя файла из первой части вложенного цикла для использования в последней части, т. Е. (Весь файл, извлеченный из "09-10-15.zip" будет называться "file1.09-10-15", " файл2.09-10-15 "...

Но я получаю нулевое значение, используя set FileExt = %% ~ ni, если я установил статическое значение в качестве теста, я вижу, что оно не достигает моей последней строки.

Я теперь официально в полной растерянности, любая помощь будет принята с благодарностью.

@ECHO OFF
EnableDelayedExpansion
for /r d:\ %%j in (*.zip) do (
set FileExt="%%~ni"
"c:\program files (x86)\winzip\wzunzip.exe" -d "%%j" C:\AllDWG\
for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.%FileExt%"
)

1 ответ1

0

Я пытаюсь получить имя файла из первой части вложенного цикла

@ECHO OFF
EnableDelayedExpansion
for /r d:\ %%j in (*.zip) do (
set FileExt="%%~ni"
"c:\program files (x86)\winzip\wzunzip.exe" -d "%%j" C:\AllDWG\
for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.%FileExt%"
)

В вашем командном файле есть несколько ошибок.

EnableDelayedExpansion

Это неправильный синтаксис (см. Delayedexpansion), он должен быть установлен setlocal enabledelayedexpansion .

set FileExt="%%~ni"

Переменная i не определена в этой точке (ваш первый цикл for использует %%j), поэтому ее следует set FileExt="%%~nj" .

for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.%FileExt%"

Здесь вам нужно использовать отложенное расширение , так как %FileExt% имеет разное значение при каждом проходе через цикл for , так и должно быть !FileExt! ,

Попробуйте следующий пакетный файл (не проверен, так как у меня нет подходящего zip-файла):

@echo off 
setlocal enabledelayedexpansion
for /r d:\ %%j in (*.zip) do (
  set FileExt="%%~nj"
  "c:\program files (x86)\winzip\wzunzip.exe" -d "%%j" C:\AllDWG\
  for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.!FileExt!"
  )
endlocal  

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

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for /f - команда цикла: для набора файлов - условно выполнить команду для каждого элемента.
  • for /r - перебирать файлы (подпапки Recurse).

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