批处理,处理路径中的空格
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 on
,For
似乎获得了正确的文件规范(原始 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"
)
我有一个 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 on
,For
似乎获得了正确的文件规范(原始 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"
)