Я пытаюсь написать пакетный файл Windows, чтобы получить ниже OUTPUT для данного INPUT

< Сильный > INPUT:

//Dev-420/PAVAN/src/main/java/test/abcd/mnop/HealthCheck.java - edit change 1111111
 //Dev-420/PAVAN/src/main/java/test/abcd/mnop/HealthStatus.java - edit change 1111111
 //Dev-420/PAVAN/src/main/java/test/xyz/Relations.java - edit change 1111111

< Сильный > ВЫВОД :

target/classes/test/abcd/mnop/, target/classes/test/abcd/mnop/, target/classes/test/xyz

Ниже приведен сценарий, который я использовал, однако замена имени файла не работает.

@echo off
set "File2Read=files_list.tmp"
SET "BINARY_PATH="
set "FILENAME="
setlocal EnableDelayedExpansion
set "BINARY_FILENAME="
set "lastPart="
set "replaceBinaryPath=target/classes/"
SET "replaceBinaryFileName=,"
set "basePath=//ATT/Dev-420/PAVAN/src/main/java/"
for /f "delims=" %%a in ('Type "%File2Read%"') do (
set "line=%%a"
for /f "tokens=1,2,3,4,5 delims= " %%a in ("!line!") do  set FILENAME=%%a

set "BINARY_FILENAME=!FILENAME:%basePath%=%replaceBinaryPath%!"
if not !FILENAME!==!BINARY_FILENAME! (
for %%a in ("!BINARY_FILENAME!/.") do set "lastPart=%%~nxa"
set "BINARY_PATH=!BINARY_FILENAME:!lastPart!=%replaceBinaryFileName%!"
echo !BINARY_PATH!
)
)
endLocal

Здесь все работает, как ожидалось, кроме утверждения ниже,

set "BINARY_PATH=!BINARY_FILENAME:!lastPart!=%replaceBinaryFileName%!"

Поскольку "lastPart" будет динамически изменяющимся значением, чтобы заменить его "запятой" Предполагалось, что он будет работать с !lastPart!, но он не работает, и на выходе будет слово ‘lastPart’ Мы не можем использовать %lastPart%, поскольку это динамическая переменная.

Пожалуйста, помогите мне заменить динамическую строку запятой.

Пожалуйста, помогите мне здесь!

1
Pavan Shinde 24 Сен 2018 в 18:24

2 ответа

Лучший ответ

Вы можете использовать выражение %%~nxa напрямую, я только изменил имя параметра на %%C

..
for /f "delims=" %%a in ('Type "%File2Read%"') do (
  set "line=%%a"
  for /f "tokens=1,2,3,4,5 delims= " %%a in ("!line!") do  set FILENAME=%%a

  set "BINARY_FILENAME=!FILENAME:%basePath%=%replaceBinaryPath%!"
  if not !FILENAME!==!BINARY_FILENAME! (
    for %%C in ("!BINARY_FILENAME!/.") do (
      set "BINARY_PATH=!BINARY_FILENAME:%%~nxC=%replaceBinaryFileName%!"
      echo !BINARY_PATH!
    )
  )
)
1
jeb 24 Сен 2018 в 15:27

Поскольку версия @ jeb у меня не сработала, вот альтернатива

  • поскольку использование %%~dpa изменяет разделитель путей вне окон / на \, это исправляется.

:: Q:\Test\2018\09\24\SO_52482593.cmd
@echo off & setlocal EnableDelayedExpansion
set "File2Read=files_list.tmp"
set "BINARY_PATH="
set "replaceBinaryPath=target/classes/"
set "replaceBinaryFileName=, "
set "Output="
for /f %%a in ('Type "%File2Read%"') do (
  for /f "tokens=5* delims=\/" %%b in ("%%~dpa") do (
    Set "Output=!Output!%replaceBinaryFileName%%replaceBinaryPath%%%c"
  )
)
Set "Output=%Output:\=/%"
Echo %Output:~2%
endLocal

Пример вывода:

> Q:\Test\2018\09\24\SO_52482593.cmd
target/classes/test/abcd/mnop/, target/classes/test/abcd/mnop/, target/classes/test/xyz/
1
user6811411user6811411 24 Сен 2018 в 17:43