удалить обратную косую черту из строки для оператора for - PullRequest
1 голос
/ 15 декабря 2011

У меня есть текстовый файл со списком путей к файлам.

Например, они обычно выглядят так: F: \ datapath \ еще несколько путей \ path \ path \ thefile.ext

Я пытаюсь вставить это в гобокопию, но гобокопия не любит пути к файлам с косой чертой. Итак, я пытаюсь извлечь путь к файлу, затем удалить обратную косую черту, а затем повторить команду для предварительного просмотра:

 @echo off

 FOR /F "tokens=* delims=" %%i in (filelist.txt) do (

     ECHO Copy attempt of this file: %%i

     FOR %%h IN ("%%i") DO (

          REM -- capture the file path
          SET filepath=%%~ph

          REM -- remove the trailing slash on the path
          SET filepath=%filepath:~0,1%

          REM -- echo the command to see how it looks  
          ECHO hobocopy "F:%%~ph" "V:\copy_test%%~ph" "%%~nxh"
     )
 )

Очевидно, что этот код на самом деле не работает, но я не уверен, что делать дальше.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Вы были чертовски близки к тому, чтобы найти очень хорошее решение.Вам не нужен цикл %% h FOR.И ваше решение не удастся, если путь или имя файла содержит!(маловероятно, но это может произойти)

Я не уверен, что у вас возникнут какие-либо проблемы, если файл находится в корневом каталоге.F: и F: \ обычно имеют очень разные значения.Я не рассматривал эту потенциальную проблему в приведенном ниже решении.

@echo off
FOR /F "delims=" %%i in (filelist.txt) do (
  ECHO Copy attempt of this file: %%i
  REM -- capture file path and file name
  SET "filepath=%%~pi"
  SET "filename=%%~nxi"
  REM -- enable delayed expansion so we can access variable assigned within loop
  SETLOCAL enableExtensions enableDelayedExpansion
  REM -- remove trailing backslash
  set "filepath=!filepath:~0,-1!"
  REM perform shadow copy on file
  hobocopy "F:!filepath!" "V:\copy_test!filepath!" "!filename!"
  REM -- disable delayed expansion so %%i expansion does not corrupt values containing !
  ENDLOCAL
)

Я думаю, что комментарий Joop Egen является правильным.Я считаю, что этот лайнер может работать

@echo off
for /f "delims=" %%i in (filelist.txt) do hobocopy "%%~dp." "V:\copy_test%%~p." "%%~nx"

Это очень простое решение также не должно иметь проблем с корневым каталогом.

1 голос
/ 15 декабря 2011

Кажется, у меня это работает, хотя я сомневаюсь, что это сделано наиболее эффективным способомЕсть ли лучший способ?

 @echo off

 SETLOCAL enableextensions enabledelayedexpansion

 FOR /F "tokens=* delims=" %%i in (filelist.txt) do (

     ECHO Copy attempt of this file: %%i

     FOR %%h IN ("%%i") DO (
          REM -- capture file path
          SET filepath=!filepath!%%~ph

          REM -- remote trailing backslash
          SET filepath=!filepath:~0,-1!

          REM perform shadow copy on file 
          hobocopy "F:!filepath!" "V:\copy_test!filepath!" "%%~nxh"

          REM clear variable
          SET filepath=
     )
 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...