2011-12-15 21 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のように一致する場合は、バックスラッシュの後にピリオド(。)を付けることができます –

答えて

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のコメントは正しいと思います。私はこの1つのライナーが動作すると信じています

@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= 
    ) 
) 
関連する問題