首页 > 解决方案 > 批处理脚本中的复制功能不起作用

问题描述

我正在编写一个批处理脚本,我在函数内部编写了一组指令,因为我想多次调用它,所以想重用它。对我来说,当我编写外部函数时它可以工作,但内部函数它永远不会工作。在我使用过的代码下方。

@echo off

set _prefs="%APPDATA%\test\test\BrowserProfile\prefs.js"
set _prefs_notes="%ProgramFiles(x86)%\test\tset1\Data\workspace\BrowserProfile\prefs.js"

#rem it works
copy /y %_prefs_notes% %_prefs_notes%.copy1 > nul

CALL :AMEND_PREFJS %_prefs_notes%
EXIT /B 




:AMEND_PREFJS
rem make copy of prefs file
#rem it does not work
copy /y %~1 %~1.copy > nul
findstr /v "layers.acceleration.disabled" "%~1" > "%~1.tmp"
echo end

set %~1=
EXIT /B 0
goto end

:prefs_not_found
rem set error level?
echo "file does not exist -- %_prefs_notes%"

:end
set _prefs=

标签: batch-file

解决方案


我将告诉您作为编写批处理文件的最佳实践我们大多数人所做的事情。

永远不要为变量分配引号。您可以使用引号来保护变量的分配。这有助于保护分配中的特殊字符,并且还可以防止您分配尾随空格。

养成在将文件路径与其他命令一起使用时始终使用引号将文件路径括起来的习惯。

这就是我编写批处理文件的方式。

@echo off

set "_prefs=%APPDATA%\test\test\BrowserProfile\prefs.js"
set "_prefs_notes=%ProgramFiles(x86)%\test\tset1\Data\workspace\BrowserProfile\prefs.js"

#rem it works
copy /y "%_prefs_notes%" "%_prefs_notes%.copy1" > nul

CALL :AMEND_PREFJS "%_prefs_notes%"
EXIT /B 

:AMEND_PREFJS
rem make copy of prefs file
#rem it does not work
copy /y "%~1" "%~1.copy" > nul
findstr /v "layers.acceleration.disabled" "%~1" > "%~1.tmp"
echo end
EXIT /B 0

推荐阅读