【问题标题】:Windows Shell Script: Can't make string substitution working in subroutineWindows Shell 脚本:无法在子例程中进行字符串替换
【发布时间】:2009-11-10 18:02:28
【问题描述】:

尊敬的专家您好!

您能否建议我如何处理这个问题:

@echo off
cls

setlocal enabledelayedexpansion

path=%CD%;%path% 

set NumberOfPages=553
rem set /A MaxFileIndex=%Counter% - 1
set MaxFileIndex=1

del Output.txt

for /l %%i in (0,1,%MaxFileIndex%) do call :GenerateFileList %%i
goto :eof


::::::::::::::::::::::::::
:GenerateFileList
::::::::::::::::::::::::::
setlocal enabledelayedexpansion

set CurrentFileName="File(%1).txt"
echo !CurrentFileName:"=! > Output.txt
goto :eof

::::::::::::::::::::::::::
:eof
::::::::::::::::::::::::::
endlocal

此代码在屏幕上回显,而不是写入“ExtractedLinks.txt”。这里有什么问题?

【问题讨论】:

  • 问题在于 Windows CMD 语言可能是有史以来最糟糕的脚本语言。
  • @Joe:不,不是。有人不知道如何使用它是这里的问题。 @Andrey:您为什么希望它写入“ExtractedLinks.txt”?根据您发布的内容,您没有告诉它做任何此类事情。相反,试着解释你希望完成什么;你只提供了人们想要帮助你所需信息的 10%。
  • @ken,是的。人们可以知道如何使用它,并且很好地使用它,但是生成的代码会很丑陋,难以阅读,而且往往效率低下。难以阅读和丑陋,因为 1) 语法,语法中不必要的字符,例如变量的双 %。 2)缺乏编程功能使得人们不得不做一些变通方法来产生更多不必要的代码。效率低下,因为没有足够的编程控制。
  • ghostdog:它有自己的怪癖,但每种语言也有。这个恰好比许多其他的要多。尽管如此,如果您知道自己在做什么并且相当精通,那么阅读代码仍然会告诉您它的作用,无论它看起来多么丑陋。

标签: windows string cmd substitution subroutine


【解决方案1】:

我假设您的意思是 Output.txt 而不是 ExtractedLinks.txt:

set c=!CurrentFileName:"=!
echo %c% > Output.txt

此外,除非您在 for 循环中执行其他操作,否则您可能希望追加而不是覆盖:

echo %c% >> Output.txt

如果您真的希望文件名是 ExtractedLinks.txt,只需更改它即可。

echo %c% >> ExtractedLinks.txt

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2016-09-03
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多