批处理,处理路径中的空格

batch, dealing with spaces in path

我有一个 CSV 文件,每行都有前导和尾随的双引号,我想删除,并制作了一个 DOS 批处理来完成它。以下适用于显式路径:

@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in (C:\Folder\WrappedInQuotes.csv) do (
    set line=%%A
    echo !line:~1,-1! >> C:\Folder\UnWrapped.csv
)

当然,如果路径中有空格,下面的就不行了:

@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in (C:\Folder\Sub Folder\WrappedInQuotes.csv) do (
    set line=%%A
    echo !line:~1,-1! >> C:\Folder\Sub Folder\UnWrapped.csv
)

(@echo on,消息当然是“...cannot find the file C:\Folder\Sub”)

作为下一步测试,我只是将两个显式文件规范用双引号括起来:

@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in ("C:\Folder\Sub Folder\WrappedInQuotes.csv") do (
    set line=%%A
    echo !line:~1,-1! >> "C:\Folder\Sub Folder\UnWrapped.csv"
)

对于 @echo onFor 似乎获得了正确的文件规范(原始 CSV),但现在目标 CSV 具有

:\Folder\Sub Folder\EachLineWrappedInQuotes.cs

(源 CSV 完整文件规范,删除了第一个和最后一个字符),而不是删除了第一个和最后一个字符(双引号环绕)的源 CSV 的内容。

最终,我想用 %~dp0 之类的路径变量替换显式路径,但无法通过 "next-step test".

(我试图通过研究已经给出的许多答案来解决这个问题,但没有成功,抱歉!)

获取文件内容并去除双引号,无需设置变量,设置usebackq

方法一:

@echo off
for /F "usebackq tokens=*" %%A in ("C:\Folder\Sub Folder\WrappedInQuotes.csv") do (
    echo %%~A >> "C:\Folder\Sub Folder\UnWrapped.csv"
)

方法二,如果你还想设置变量:

@echo off
setlocal enabledelayedexpansion
for /F "usebackq tokens=*" %%A in ("C:\Folder\Sub Folder\WrappedInQuotes.csv") do (
    set line=%%~A
    echo !line! >> "C:\Folder\Sub Folder\UnWrapped.csv"
)

或者使用 type :

@echo off
for /F "tokens=*" %%A in ('type "C:\Folder\Sub Folder\WrappedInQuotes.csv"') do (
    echo %%~A >> "C:\Folder\Sub Folder\UnWrapped.csv"
)