【问题标题】:remove trailing backslash from string in for statement从 for 语句中的字符串中删除尾随反斜杠
【发布时间】:2012-01-21 10:40:54
【问题描述】:

我有一个包含文件路径列表的文本文件。

例如,它们通常看起来像这样: F:\datapath\更多路径\path\path\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"
     )
 )

显然该代码实际上不起作用,但我不确定如何从这里开始。

【问题讨论】:

  • 不是我的菜;但如果可以匹配 IF %%h ~= /*\\/ THEN,那么您可以在反斜杠后附加句点 (.)

标签: batch-file


【解决方案1】:

您已经接近找到一个非常好的解决方案了。您不需要 %%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"

这个非常简单的解决方案对根目录也不应该有任何问题。

【讨论】:

    【解决方案2】:

    我似乎已经让它工作了,尽管我怀疑它是以最有效的方式完成的。有没有更好的办法?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      相关资源
      最近更新 更多