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
set %~1=
EXIT /B 0
goto end
:prefs_not_found
rem set error level?
echo "file does not exist -- %_prefs_notes%"
:end
set _prefs=
解决方案
我将告诉您作为编写批处理文件的最佳实践我们大多数人所做的事情。
永远不要为变量分配引号。您可以使用引号来保护变量的分配。这有助于保护分配中的特殊字符,并且还可以防止您分配尾随空格。
养成在将文件路径与其他命令一起使用时始终使用引号将文件路径括起来的习惯。
这就是我编写批处理文件的方式。
@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
推荐阅读
- docker - docker -v 参数详情
- automation - Ranorex 与测试铁路连接登录问题
- firebase - 无法在模拟器上运行 cron 作业 Pub/Sub 和 Cloud Scheduler
- javascript - 网页刷新时抖动
- mysql - 选择具有优先级值的唯一行
- express - Azure 事件 Webhook 验证失败
- css - 反应:当状态改变时,CSS不会重新计算网格容器中的高度
- python-3.x - 我的 requests-html 不起作用并给出错误“没有名为 email.utils 的模块。”
- xilinx - yosys综合时如何提供xilinx原语的映射信息
- python - 带有buildozer的adroid中的kivy应用程序,终端循环“#waiting for application to start”