У вас есть несколько проблем. Во-первых, проблема отказа в доступе связана с тем, что вы перенаправляете на скрытый файл.
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 -
Если вы повторяете %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%
. Вероятно, это ваша ошибка «не удается найти файл».