【问题标题】:"access denied" error message for a text file i just made?我刚刚制作的文本文件的“访问被拒绝”错误消息?
【发布时间】:2010-12-02 21:06:57
【问题描述】:

大约 3 天前我问了一个问题,可以在这里找到:

how to replace a string on the second line in a text file using a batch file?

我正在将文本文件中的字母转换为它们各自的数字。我收到诸如“访问被拒绝”和“无法找到此文件”之类的错误消息——但给我所有这些错误的同一个批处理文件也是使这些文本文件开始的那个!所以它应该与批处理文件本身位于同一目录中(除非另有说明),对吧?我什至去了那个文件夹并检查了,他们在那里。

我确实添加了一个小脚本来隐藏创建后的文件,这样它就不会看起来那么混乱。我通过使用

做到了这一点
attrib +h C:\script\%name%.txt

使用此命令隐藏文件是否会使其对正在搜索/调用它的批处理程序不可见?

这是文件“stringparsing.bat”的链接:http://uploading.com/files/a1m1d2f4/stringparsing.bat/

如果您能帮助我让这个程序在没有任何错误的情况下执行其任务,我们将不胜感激!

这是完整的“stringparsing.bat”文件:

@echo off
setlocal enabledelayedexpansion 
title BETA
cls
cd C:\script\st
echo.
echo.
echo.
echo      Setting Variables...
echo      Loading Language Database...

:: ###################################################################################
::    CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE
:: ###################################################################################




TIMEOUT /t 5 /nobreak > nul

goto MAIN

:MAIN
set foo=0
cls
echo.
echo.
echo.
echo.
echo            ===================================
echo             #################################        
echo             #######     Main Menu:    #######
echo             #################################
echo            ===================================
echo.
echo.
echo             1.) Create New Language File...
echo.
echo             2.) Load Existing Lanuage File...
echo.
echo             3.) Settings...

echo ---------------------------------------------------------

SET /p CHOICE= Select a Function:
IF %CHOICE%== 1 GOTO CREATE
IF %CHOICE%== 2 GOTO LOAD
IF %CHOICE%== 3 GOTO SETTINGS

GOTO MAIN

:CREATE
cls
title Step 1
echo.
echo.
echo.
echo         =================================================================================
echo.
set /p name=  please type a name for your new language file:
echo.
echo         =================================================================================
cls
echo. > %name%.txt
echo.
echo.
echo.
echo        ==============================================================
echo        ##############################################################
echo        #============================================================#
echo        #                                                            #
echo        # - After you hit enter you will be redirected               #
echo        #   to a Live Typer. so anything you type into               #
echo        #   it will be sent to %name%.txt.                           #
echo        #                                                            #
echo        #                                                            #
echo        # - Next, select load language File For Encoding!            #
echo        #                                                            #
echo        #============================================================#
echo        ##############################################################
echo        ==============================================================

set /p line1= :
echo %line1% >> %name%.txt 2> nul


echo %name% > Language_File.txt
attrib +h Language_File.txt
set /a foo+ =1
)
echo.
echo ==========================================================

goto LOAD



:LOAD
set /a foo+ =1
IF %foo%== 2 goto loadexternal
goto LOAD23

:loadexternal
echo.
echo language file is loading now!
set /p name=<Language_File.txt
timeout /t 4 /nobreak > nul
echo.
echo.
echo Language_File Loaded!
pause >nul
goto LOAD23

:LOAD23
cls
echo.
echo.
echo.
echo.
echo.
echo        Encoding Your Language File... Please Wait... 
echo.
echo.
echo.

for /f "delims=" %%i in (!name!.txt) do ( 
echo translating "%%i"
set var=%%i 
set var=!var:a=1 ! 
set var=!var:b=2 ! 
set var=!var:c=3 ! 
set var=!var:d=4 ! 
set var=!var:e=5 ! 
set var=!var:f=6 ! 
set var=!var:g=7 ! 
set var=!var:h=8 ! 
set var=!var:i=9 ! 
set var=!var:j=10 ! 
set var=!var:k=11 ! 
set var=!var:l=12 ! 
set var=!var:m=13 ! 
set var=!var:n=14 ! 
set var=!var:o=15 ! 
set var=!var:p=16 ! 
set var=!var:q=17 ! 
set var=!var:r=18 ! 
set var=!var:s=19 ! 
set var=!var:t=20 ! 
set var=!var:u=21 ! 
set var=!var:v=22 ! 
set var=!var:w=23 ! 
set var=!var:x=24 ! 
set var=!var:y=25 ! 
set var=!var:z=26 ! 

echo !var! 
) 

echo !var! > !name!.txt

pause >nul
TIMEOUT /t 5 /nobreak > nul

goto MAIN


:END
cls
title SHUTTING DOWN...
echo.
echo.
echo.
echo            Terminating service stream...
echo.
echo.
echo.
echo.
echo            Done! Thank you for using this program!
TIMEOUT /t 5 /nobreak > nul





::(%xx%) -1  I/O Stream= "SHELL.dll" 
:: IF EXIST [&1[Parser_2009]] exit

Exit


:: #####################################################################################

【问题讨论】:

  • 无法访问文件,只需粘贴代码即可。
  • 链接对我来说很好用......但是我粘贴了代码
  • 我尝试发布代码,但它没有保留格式,因此混淆了.. 只需点击我帖子底部的链接即可获取脚本的完整副本

标签: batch-file cmd access-denied


【解决方案1】:

您遇到了一些问题。首先,访问被拒绝的问题是你重定向到一个隐藏文件。

echo %name% > Language_File.txt
attrib +h Language_File.txt

请注意,第一次运行脚本时,它会运行,因为 Language_File.txt 不存在,因此不会被隐藏。第二次运行它时,您将被拒绝访问。我不知道为什么 Windows 不允许你这样做。您可以通过多种方式解决此问题。

1. 将您的文件保存到用户的临时目录。使用这种方法,您的目录不会变得杂乱无章。

echo %name% > %TMP%\Language_File.txt

2. 将文件保存到您拥有的子目录中,以免脚本目录混乱。

if not exist workspace mkdir workspace
echo %name% > workspace\Language_File.txt

3.在使用之前取消隐藏文件。由于该文件在您第一次运行脚本时可能不存在,因此如果存在,您应该只使用attrib -h

if exist Language_File.txt attrib -h Language_File.txt
echo %name% > %TMP%\Language_File.txt
attrib +h Language_File.txt

4. 根本不要使用 Language_File.txt!我不明白你为什么需要它。只需使用变量来保存语言文件的名称。其实%name%里的名字你已经有了吧?

其次,您应该检查变量的值,以了解它们的实际值。当您将 Language_File.txt 的内容加载到变量中时,它会加载所有内容。这包括隐藏的换行符\r\n,尽管脚本似乎将它们作为空格带入变量中。见:

c:\batch\t>echo language file is loading now!
language file is loading now
C:\batch\t>set /p name= <Language_File.txt
C:\batch\t>echo -%name%-
-langfile  -

如果你 echo %name% 被连字符包围,你可以看到它后面有 2 个空格(大概是)换行符。为了解决这个问题,你可以使用 set 来修剪尾随字符。

C:\batch\t>echo language file is loading now!
language file is loading now
C:\batch\t>set /p name= <Language_File.txt
C:\batch\t>set name=%name:~0,-2%
C:\batch\t>echo -%name%-
-langfile-

在第二个例子中,`%name% 没有隐藏字符。

最后,您只需要使用! 来访问您在for 循环中设置的变量。所以所有对!name! 的引用都应该是%name%。这可能是您的“找不到文件”错误。

【讨论】:

  • 好的,太完美了!谢谢!顺便说一句,我使用语言文件来存储用户输入的另一个文本文件的名称,因为如果用户只是创建文本文件,然后一旦返回主菜单,他们就会关闭程序,当他们重新打开它时他们的文件名仍将存储在语言文件中!不幸的是,变量在当前命令行窗口退出时重置......无论如何再次感谢!
  • 我遇到了一个问题....我修复了拒绝访问错误,但是“windows 找不到指定的文件”错误确实令人困惑,我在普通命令行中对其进行了测试,“type french .txt”显示我创建的文本文件的内容,“set /p var=%name%.txt”显示错误。但是在那之后,我输入了“echo %name%”,它显示了文本文件的内容。所以问题在于使用(或误用)带有变量的 set /p 命令。希望这可以帮助您进一步阐述您的概念。
【解决方案2】:

这里是“stringparsing.bat”文件:

@echo off
setlocal enabledelayedexpansion 
title BETA
cls
cd C:\script\st
echo.
echo.
echo.
echo      Setting Variables...
echo      Loading Language Database...

:: ###################################################################################
::    CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE
:: ###################################################################################




TIMEOUT /t 5 /nobreak > nul

goto MAIN

:MAIN
set foo=0
cls
echo.
echo.
echo.
echo.
echo            ===================================
echo             #################################        
echo             #######     Main Menu:    #######
echo             #################################
echo            ===================================
echo.
echo.
echo             1.) Create New Language File...
echo.
echo             2.) Load Existing Lanuage File...
echo.
echo             3.) Settings...

echo ---------------------------------------------------------

SET /p CHOICE= Select a Function:
IF %CHOICE%== 1 GOTO CREATE
IF %CHOICE%== 2 GOTO LOAD
IF %CHOICE%== 3 GOTO SETTINGS

GOTO MAIN

:CREATE
cls
title Step 1
echo.
echo.
echo.
echo         =================================================================================
echo.
set /p name=  please type a name for your new language file:
echo.
echo         =================================================================================
cls
echo. > %name%.txt
echo.
echo.
echo.
echo        ==============================================================
echo        ##############################################################
echo        #============================================================#
echo        #                                                            #
echo        # - After you hit enter you will be redirected               #
echo        #   to a Live Typer. so anything you type into               #
echo        #   it will be sent to %name%.txt.                           #
echo        #                                                            #
echo        #                                                            #
echo        # - Next, select load language File For Encoding!            #
echo        #                                                            #
echo        #============================================================#
echo        ##############################################################
echo        ==============================================================

set /p line1= :
echo %line1% >> %name%.txt 2> nul


echo %name% > Language_File.txt
attrib +h Language_File.txt
set /a foo+ =1
)
echo.
echo ==========================================================

goto LOAD



:LOAD
set /a foo+ =1
IF %foo%== 2 goto loadexternal
goto LOAD23

:loadexternal
echo.
echo language file is loading now!
set /p name=<Language_File.txt
timeout /t 4 /nobreak > nul
echo.
echo.
echo Language_File Loaded!
pause >nul
goto LOAD23

:LOAD23
cls
echo.
echo.
echo.
echo.
echo.
echo        Encoding Your Language File... Please Wait... 
echo.
echo.
echo.

for /f "delims=" %%i in (!name!.txt) do ( 
echo translating "%%i"
set var=%%i 
set var=!var:a=1 ! 
set var=!var:b=2 ! 
set var=!var:c=3 ! 
set var=!var:d=4 ! 
set var=!var:e=5 ! 
set var=!var:f=6 ! 
set var=!var:g=7 ! 
set var=!var:h=8 ! 
set var=!var:i=9 ! 
set var=!var:j=10 ! 
set var=!var:k=11 ! 
set var=!var:l=12 ! 
set var=!var:m=13 ! 
set var=!var:n=14 ! 
set var=!var:o=15 ! 
set var=!var:p=16 ! 
set var=!var:q=17 ! 
set var=!var:r=18 ! 
set var=!var:s=19 ! 
set var=!var:t=20 ! 
set var=!var:u=21 ! 
set var=!var:v=22 ! 
set var=!var:w=23 ! 
set var=!var:x=24 ! 
set var=!var:y=25 ! 
set var=!var:z=26 ! 

echo !var! 
) 

echo !var! > !name!.txt

pause >nul
TIMEOUT /t 5 /nobreak > nul

goto MAIN


:END
cls
title SHUTTING DOWN...
echo.
echo.
echo.
echo            Terminating service stream...
echo.
echo.
echo.
echo.
echo            Done! Thank you for using this program!
TIMEOUT /t 5 /nobreak > nul





::(%xx%) -1  I/O Stream= "SHELL.dll" 
:: IF EXIST [&1[Parser_2009]] exit

Exit


:: #####################################################################################

我终于学会了如何格式化代码sn-p。 (如果您需要,这里是另一个副本的链接。)

how to replace a string on the second line in a text file using a batch file?

【讨论】:

  • 您不必在每一行后按回车键。将您的代码粘贴到文本框中并突出显示。然后在您粘贴它的文本框上方,您会看到一个工具栏。单击“101010”按钮将其转换为代码块。您可以删除您留下的这个答案(您应该会看到一个可以单击的删除链接),因为我已经编辑了您的帖子以添加代码。 (不要删除您发布的问题。只需删除此答案)
  • 不幸的是它不允许我删除它,或者我只是忘记了这个“删除”链接......我只看到我发布的答案底部的编辑、链接和标记按钮...... .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多