批处理路径中的空格

时间:2019-11-13 06:27:35

标签: windows batch-file filepath

我有一个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这样的路径变量来替换显式路径,但是还没有通过“下一步测试”。

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

1 个答案:

答案 0 :(得分:0)

要获取文件的内容并删除双引号而不需要设置变量,请设置usebackq

方法1:

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

方法2,如果仍然要设置变量:

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