从字符串中删除尾部反斜杠for语句
问题描述:
我有一个带有文件路径列表的文本文件。从字符串中删除尾部反斜杠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"
)
)
显然代码不实际工作,但我不知道如何从这里出发。
答
你已经接近有一个非常好的解决方案。你不需要%% 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"
这个非常简单的解决方案应该不会有根目录的任何问题。
答
我似乎已经得到它的工作,但我怀疑它是以最有效的方式完成的。有没有更好的办法?
@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=
)
)
不是我的事;但是如果可以像IF %% h〜=/* \\/THEN那样匹配,则可以在反斜杠后添加一个句点(。) – 2011-12-15 19:05:32