如何在某些文本之前在批处理文件输出 txt 文件中包含 space 或任何特殊字符?
How to include space or any special character in a batch file output txt file before certain texts?
我是运行批处理文件使用命令
for /R .\ %%f IN ("*.tab") DO (echo File: %%f & gdalsrsinfo -o wkt "%%f") >>U:\srsinfo.csv
输出为
File: D:\QAQC\OldM_AGSO_Railways_Aust.TAB
GEOGCS["unnamed",DATUM["North_American_Datum_1983",SPHEROID["GRS 80",6378137,298.257222101],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]
File: D:\RTXQAQC\OldM_AGSO_Roads_Aust.TAB
GEOGCS["unnamed",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]
现在,我想要单独的文件名,并且在它之前应该在一行中。这样使用 texy -> columns 我可以分隔字段。为此,是否可以在 GEOGCS - Datum - Spehroid 之前包含 space 或任何特殊字符,以便我可以使用 excel
中的文本 -> 列选项轻松分隔它
我更喜欢这种格式
1M_AGSO_Railways_Aust.TAB ***SPACE*** GEOGCS["unnamed",DATUM["North_American_Datum_1983" ***SPACE***SPHEROID["GRS 80",6378137,298.257222101] ***SPACE*** TOWGS84[0,0,0,-0,-0,-0,0]]
基本上在每个参数之前,我需要一个space来分隔使用文本到列选项
命令 FOR 可用于获取写入 stdout 的控制台应用程序的输出重定向到循环或环境变量以进行进一步处理。
我提供了两种获取 CSV 文件的解决方案,其中感兴趣的数据由水平制表符分隔。
解决方案 1 使用逗号作为分隔符将行拆分为感兴趣的数据。
@echo off
set "Separator= "
if exist U:\srsinfo.csv del U:\srsinfo.csv
for /R .\ %%# in (*.tab) do (
for /F "tokens=1-14 delims=," %%A in ('gdalsrsinfo.exe -o wkt "%%#"') do (
echo %%~nx#%Separator%%%A,%%B%Separator%%%C,%%D,%%E%Separator%%%F,%%G,%%H,%%I,%%J,%%K,%%L
)
) >>U:\srsinfo.csv
set "Separator="
注意:第二行等号后的字符必须是水平制表符,而不是浏览器根据[=67=显示的space字符]标准。
由于数据行包含的逗号比插入 CSV 分隔符的逗号多得多,因此需要大量标记(分配给循环变量的字符串)才能获得所需的输出。
方案2通过关键字分隔数据。
@echo off
setlocal EnableDelayedExpansion
set "Separator= "
if exist U:\srsinfo.csv del U:\srsinfo.csv
for /R .\ %%# in (*.tab) do (
for /F "delims=" %%L in ('gdalsrsinfo.exe -o wkt "%%#"') do (
set "DataRow=%%L"
set "DataRow=!DataRow:,SPHEROID=%Separator%!
set "DataRow=!DataRow:,TOWGS84=%Separator%!
set "DataRow=!DataRow:,PRIMEM=%Separator%!
for /F "tokens=1-3 delims=%Separator%" %%A in ("!DataRow!") do (
echo %%~nx#%Separator%%%A%Separator%SPHEROID%%B%Separator%TOWGS84%%C
)
)
) >>U:\srsinfo.csv
endlocal
注意:第三行等号后的字符必须是水平制表符。
此解决方案用分隔符替换关键字和关键字左侧的逗号,并将结果分配给环境变量 DataRow
。完成必要的分离后,再使用一个 FOR 命令获取 CSV 文件的行,再次添加关键字并仅包含感兴趣的数据。
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
for /?
... 还解释了 %~nx#
(只是文件的名称和扩展名,没有驱动器和路径)
if /?
set /?
setlocal /?
并查看有关 Using command redirection operators 的 Microsoft 文章。
我是运行批处理文件使用命令
for /R .\ %%f IN ("*.tab") DO (echo File: %%f & gdalsrsinfo -o wkt "%%f") >>U:\srsinfo.csv
输出为
File: D:\QAQC\OldM_AGSO_Railways_Aust.TAB
GEOGCS["unnamed",DATUM["North_American_Datum_1983",SPHEROID["GRS 80",6378137,298.257222101],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]
File: D:\RTXQAQC\OldM_AGSO_Roads_Aust.TAB
GEOGCS["unnamed",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]
现在,我想要单独的文件名,并且在它之前应该在一行中。这样使用 texy -> columns 我可以分隔字段。为此,是否可以在 GEOGCS - Datum - Spehroid 之前包含 space 或任何特殊字符,以便我可以使用 excel
中的文本 -> 列选项轻松分隔它我更喜欢这种格式
1M_AGSO_Railways_Aust.TAB ***SPACE*** GEOGCS["unnamed",DATUM["North_American_Datum_1983" ***SPACE***SPHEROID["GRS 80",6378137,298.257222101] ***SPACE*** TOWGS84[0,0,0,-0,-0,-0,0]]
基本上在每个参数之前,我需要一个space来分隔使用文本到列选项
命令 FOR 可用于获取写入 stdout 的控制台应用程序的输出重定向到循环或环境变量以进行进一步处理。
我提供了两种获取 CSV 文件的解决方案,其中感兴趣的数据由水平制表符分隔。
解决方案 1 使用逗号作为分隔符将行拆分为感兴趣的数据。
@echo off
set "Separator= "
if exist U:\srsinfo.csv del U:\srsinfo.csv
for /R .\ %%# in (*.tab) do (
for /F "tokens=1-14 delims=," %%A in ('gdalsrsinfo.exe -o wkt "%%#"') do (
echo %%~nx#%Separator%%%A,%%B%Separator%%%C,%%D,%%E%Separator%%%F,%%G,%%H,%%I,%%J,%%K,%%L
)
) >>U:\srsinfo.csv
set "Separator="
注意:第二行等号后的字符必须是水平制表符,而不是浏览器根据[=67=显示的space字符]标准。
由于数据行包含的逗号比插入 CSV 分隔符的逗号多得多,因此需要大量标记(分配给循环变量的字符串)才能获得所需的输出。
方案2通过关键字分隔数据。
@echo off
setlocal EnableDelayedExpansion
set "Separator= "
if exist U:\srsinfo.csv del U:\srsinfo.csv
for /R .\ %%# in (*.tab) do (
for /F "delims=" %%L in ('gdalsrsinfo.exe -o wkt "%%#"') do (
set "DataRow=%%L"
set "DataRow=!DataRow:,SPHEROID=%Separator%!
set "DataRow=!DataRow:,TOWGS84=%Separator%!
set "DataRow=!DataRow:,PRIMEM=%Separator%!
for /F "tokens=1-3 delims=%Separator%" %%A in ("!DataRow!") do (
echo %%~nx#%Separator%%%A%Separator%SPHEROID%%B%Separator%TOWGS84%%C
)
)
) >>U:\srsinfo.csv
endlocal
注意:第三行等号后的字符必须是水平制表符。
此解决方案用分隔符替换关键字和关键字左侧的逗号,并将结果分配给环境变量 DataRow
。完成必要的分离后,再使用一个 FOR 命令获取 CSV 文件的行,再次添加关键字并仅包含感兴趣的数据。
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
for /?
... 还解释了%~nx#
(只是文件的名称和扩展名,没有驱动器和路径)if /?
set /?
setlocal /?
并查看有关 Using command redirection operators 的 Microsoft 文章。