2011-12-15 105 views
1

我有一個帶有文件路徑列表的文本文件。從字符串中刪除尾部反斜槓for語句

例如,他們一般是這樣的: F:\數據路徑\一些路徑\路徑\路徑\ thefile.ext

我試圖把它送入hobocopy,但hobocopy不喜歡文件路徑後面的斜槓。所以,我試圖提取該文件的路徑,然後刪除斜槓,然後回顯命令預覽:

@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" 
    ) 
) 

顯然代碼不實際工作,但我不知道如何從這裏出發。

+1

不是我的事;但是如果可以像IF %% h〜=/* \\/THEN那樣匹配,則可以在反斜槓後添加一個句點(。) – 2011-12-15 19:05:32

回答

2

你已經接近有一個非常好的解決方案。你不需要%% 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

我似乎已經得到它的工作,但我懷疑它是以最有效的方式完成的。有沒有更好的辦法?

@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= 
    ) 
)