【问题标题】:Convert all words from text file to UpperCase using cmd or vbsscript [closed]使用 cmd 或 vbsscript 将文本文件中的所有单词转换为大写 [关闭]
【发布时间】:2017-06-05 15:37:25
【问题描述】:

我有一个名为 C:\Test.txt 的文本文件。我想使用 cmd 将文本文件中的所有单词转换为大写。你能帮帮我吗?

我试过了

@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 文件的位置放在哪里

【问题讨论】:

  • yourbatchfilename filenametoprocess 应该处理文件
  • 我不明白你。如果我没有在某处设置位置或将其提供给某个变量,它将如何处理 C:\ 中名为 test.txt 的文本文件。抱歉,我是 cmd 和 vbs 脚本的新手
  • %1 表示“第一个参数”。因此,您将文件名作为参数提供给批处理文件:yourbatchfile.bat "C:\Test.txt",然后%1 将保留C:\Test.txt

标签: batch-file vbscript cmd


【解决方案1】:

正如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"

您必须指定与输入文件不同的文件。

【讨论】:

    【解决方案2】:

    将文本文件作为变量加载后,您可以循环遍历每个字符 前锋 并检查 Asci 值 (msgbox Asc("A"))。 如果 asci 码在 97 和 122 之间(“a”和“z”),则删除 32(“A”是 65,“a”是 97 ---->“z”是 122,“Z”是 90)。

    【解决方案3】:

    你可以试试这样的:

    其中%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
    )
    ::**********************************************************************
    

    【讨论】:

      【解决方案4】:

      文件: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 2019-01-06
        • 1970-01-01
        相关资源
        最近更新 更多