Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 删除for语句中字符串的尾随反斜杠_Batch File - Fatal编程技术网

Batch file 删除for语句中字符串的尾随反斜杠

Batch file 删除for语句中字符串的尾随反斜杠,batch-file,Batch File,我有一个带有文件路径列表的文本文件 例如,它们通常如下所示: F:\datapath\some more path\path\path\thefile.ext 我试图将其输入hobocopy,但hobocopy不喜欢带有斜杠的文件路径。因此,我试图提取文件的路径,然后删除尾随的反斜杠,然后回显命令以预览它: @echo off FOR /F "tokens=* delims=" %%i in (filelist.txt) do ( ECHO Copy attempt of th

我有一个带有文件路径列表的文本文件

例如,它们通常如下所示: F:\datapath\some more path\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"
     )
 )

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

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

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

你差一点就有了一个很好的解决方案。您不需要%%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
)
我认为约普·埃根的评论是正确的。我相信这一行可能行得通

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

这个非常简单的解决方案在根目录上也不会有任何问题。

这不是我的事;但是如果一个可以像if%%h~=/*\\\/那样匹配,那么您可以在反斜杠后面附加句点(.)