我有一个名为C:\ Test.txt的文本文件。我想使用cmd将文本文件中的所有单词转换为UpperCases。你能帮我吗?
我试过
@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%a in (%1) do (
set "line=%%a"
for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set "line=!line:%%b=%%b!"
)
echo !line!
)
但是我看不到放置test.txt文件位置的位置
答案 0 :(得分:0)
将文本文件作为变量加载后,您可以循环遍历每个char 的foreach 并检查Asci值(msgbox Asc(“A”))。 如果asci代码在97和122之间(“a”和“z”),则删除32(“A”为65,“a”为97 ---->“z”为122,“Z”为90)
答案 1 :(得分:0)
你可以尝试这样的事情:
%1
是第一个参数,表示 InputFile ,%2
是第二个参数,表示 OutputFile
@echo off
set "InputFile=C:\Test.txt"
set "OuputFile=C:\UpCaseTest.txt"
If Exist "%OuputFile%" Del "%OuputFile%"
Call :Convert2UpCase "%InputFile%" "%OuputFile%"
Start "" "%OuputFile%"
Exit /b
::**********************************************************************
:Convert2UpCase <InputFile> <OutputFile>
setlocal EnableDelayedExpansion
for /F "delims=" %%a in ('Type %1') do (
set "line=%%a"
for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set "line=!line:%%b=%%b!"
)
echo !line!>>%2
)
::**********************************************************************
答案 2 :(得分:0)
Stephan已在comment中指出,%1
构成argument reference,指向第一个命令行参数。因此,假设批处理文件名为upper-case.bat
且文本文件为C:\test.txt
,则必须按以下方式调用批处理文件:
upper-case.bat C:\test.txt
但是,如果您的测试文件在其路径中包含空格或特殊字符,例如C:\test file.txt
,则必须将其放在引号之间,如下所示:
upper-case.bat "C:\test file.txt"
为了使您的批处理文件不失败,您必须像这样修改它以正确处理引用的参数:
@echo off
setlocal EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%~1") do (
set "line=%%a"
for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set "line=!line:%%b=%%b!"
)
echo(!line!
)
而不是%1
我写了"%~1"
,它首先删除了潜在的引号(~
),然后在结果周围放置引号。这样,我们总是有一对引号。要使for /F
正确处理引号,以便不将引用的文件路径视为文字字符串,我添加了usebackq
选项。
请注意for /F
忽略空行,因此会丢失。它还忽略以分号(;
)开头的行,因为它有默认的eol
选项;要避免这种情况,请使用奇怪的未加引号的语法"usebackq delims="
替换usebackq^ delims^=^ eol^=
(您不能声明"usebackq delims= eol="
,因为这会将"
定义为eol
字符)
为防止echo
在遇到仅限空白行的情况下返回ECHO is {on|off}.
,我将echo
后面的 SPACE 替换为(
因为这是安全返回给定字符串的唯一方法。
顺便说一下,要将输出写入另一个文本文件,请使用redirection,如下面的命令行所示:
upper-case.bat "C:\test.txt" > "C:\return.txt"
请注意您必须指定与输入文件不同的文件。
答案 3 :(得分:-1)
文件:fucase.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\Test.txt", 1, True)
Do Until f.AtEndOfStream
WScript.Echo UCase(f.ReadLine)
Loop
f.Close
批量(或cmd)电话:
cscript fucase.vbs