• 締切済み

シンボリックリンクが開けない

親フォルダーに、aフォルダーとbフォルダーが入っています。 aフォルダー配下には、xフォルダーがあり、その中には複数のテキストファイルが入っています。 parent\a\x\test.txt parent\b\ 以下の様なバッチファイルを「送る」に登録しました。 @echo off cd /D %~1\x\ for %%i in (*.*) do ( mklink "..\..\b\%%~nxi" "%%i" ) これにより、aフォルダーを選択して「送る」からバッチファイルを実行すると、bフォルダー配下に、xフォルダー配下のすべてのファイルのシンボリックファイルが貼られました。(シンボリックファイルは作成されました。) しかし、シンボリックファイルを開こうとしても、以下のようなエラーメッセージが表示されて、開けません。 エラーコード 1921 ファイル名を解決できません。 どこを修正すればよいでしょうか。ご教示よろしくお願いします。

みんなの回答

回答No.1

mklinkはカレントディレクトリにリンクファイルを作成する仕様のようです。 MKLINK [[/D] | [/H] | [/J]] リンク ターゲット  /D ディレクトリのシンボリック リンクを作成します。既定では、    ファイルのシンボリック リンクが作成されます。  /H シンボリック リンクではなく、ハード リンクを作成します。  /J ディレクトリ ジャンクションを作成します。   リンク   新しいシンボリック リンク名を指定します。   ターゲット 新しいリンクが参照するパス (相対または絶対)を指定します。 よって mklink a ..\x\b といった形式にしなければなりません。というようにしてください。私はDOSバッチは詳しくありません。

cat-rice
質問者

お礼

回答ありがとうございました。

cat-rice
質問者

補足

先ほど、前回の質問も合わせまして、自己解決しました。 ディレクトリでなく、ファイルのシンボリックリンク作成で成功しました。やはり、mklinkの引数の設定のしかたが原因だったようです。 これでやりたいことがすべて実現できました。ありがとうございました。

関連するQ&A

  • シンボリックリンク作成のバッチファイル

    親フォルダーに、aフォルダーとbフォルダーが入っています。 aフォルダー配下には、xフォルダーがあり、その中には複数のテキストファイルが入っています。 parent\a\x\test.txt parent\b\ 以下の様なバッチファイルを「送る」に登録しました。 @echo off rem 選択ディレクトリ配下のxディレクトリに移動 cd /D %1\x\ rem カレントディレクトリにあるすべてのファイルを、bディレクトリにコピー for %%i in (*.*) do ( copy "%%i" "..\..\b\" ) これにより、aフォルダーを選択してバッチファイルを実行すると、xフォルダー配下のテキストファイルがbフォルダーの中にコピーされることは確認しました。 ここで、コピーではなく、シンボリックリンク(mklink)を作成したいのですが、引数をどのように設定すればよいでしょうか。いろいろ試しましたがうまくいきませんでした。 ご教示よろしくお願いします。

  • バッチファイルでの計算方法

    一行のみのtxtファイル(1111.txt)に日付 スペース 時間 スペース 値 が格納されています。 バッチファイルにて上記値に定数(6666)をかけ単位を追加して出力(2222.txt)したいとおもいます。 以下のように書いてみましたが どこが悪いかよくわかりません。 どなたかお教えいただきたいと思います @ECHO OFF FOR /F "eol=# tokens=1,2,3" %%a in (1111.txt) SET /A x=6666 SET y=%%c*%x% DO ECHO %%a %%b %%y >2222.txt

  • バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。

    バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。(WindowsXP) for文を使って、フォルダー内のファイル名とサイズ一覧を作ろうとしています。 1)for %%i in (c:\test\*.*) do echo %%i %%~zi>> c:\test\testfiles.txt で一応はできたのですが、これではファイルサイズがわかりにくいので、メガバイト単位にしたいのです。(だいたいわかればいいので1024で割るとかはしない) 2)for %%i in (c:\test\*.*) do echo %%i %%~zi/1000000>> c:\test\testfiles.txt 3)for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & echo %%i %%x>> c:\test\testfiles.txt としてもうまくいきません。 %%~ziが数値でなく文字列のため、だと思うのですが、3)は%の付け方とかも間違ってそう。 どう書けばメガバイト単位で一覧を出せるでしょうか? あれ? 4)for %%i in (c:\test\* ) do if %%~zi GEQ 1000000 echo %%i>> c:\test\testfiles.txt とすれば1メガ以上のファイル名一覧が出ますね。 ということは%%~ziは数値なのか。  どなたか、どこが間違っているのか教えていただけないでしょうか

  • dosでのファイルリスト取得について

    初歩的な質問ですいません。 以下のバッチファイルを作成しようと思っています。 ・特定のフォルダ配下にあるcsvファイルをバッチファイルの引数に設定したいと思っています。 例) フォルダに A.csv B.csv C.txt があるとすると バッチファイル A.csv バッチファイル B.csv を実行する。 いまいち、ファイルリストを取得してるループ処理させる方法がわかりません。

  • For文のtokensにおけるバッチファイル作成について

    はじめまして。 バッチファイルにて以下のコマンドを作成して 実行したのですがきちんと実行されません。 コマンドプロンプトを起動して1個1個実行するときちんと 実行されます。どういうことなのでしょうか? <バッチファイル> @echo off cd /d デスクトップ for /F "tokens=2" %i in ( file.txt ) do echo %i >> result.txt pause <file.txtの中身> 1<tab>2<tab>3 4<tab>5<tab>6

  • バッチ(bat)の作り方を教えてください

    今、特定フォルダ内にあるファイル3つが存在すればコマンドを実行し、無ければ4時までループさせるといったことをバッチでしたいと考えております。 イメージは以下の通りです。 D:\a.txt,D:\b.txt,D:\c.txt バッチを1時から動かして、上記3つが揃えば、そこからコマンドを実行しバッチは終了 もしなければ10分置きにファイルをチェックし、4時を過ぎればバッチを終了(コマンドを実行させない)ということをしたいです。 コマンドは何でも良いので例えば「echo HELLO」とでもしておきます。 よろしくお願いいたします。

  • バッチファイル パス名に( )や!がある場合の対処

    2つのフォルダの配下にあるすべてのファイルが一致していることを確認する 下記のtest.batのプログラムでは、フォルダ名やファイル名の中に、 ()や!が含まれていない時は正しく動作しますが、 含まれていると正しく動作しません。 (問1) パスに( )が含まれている場合 (例)set x=C:\tmp\sample\DATA(1)_SP\   set y=C:\tmp\sample\DATA(2)_SP\ は、 echo !j:%x%=!>> list1.txt の所で 「_SP\ の使い方が誤っています。」 と表示されて正しく動作しませんが どのようにすればよいでしょうか。 (問2) echo !j:%x%=!>> list1.txt を echo !j:!x!=!>> list1.txt にすると、環境変数xの部分が空白に置き換わらないのですが なぜでしょうか。 (問3) パスに!が含まれている場合 (例)DATA1とDATA2の配下に!ABCというフォルダがある場合   C:\tmp\sample\DATA1\!ABC\… は、 for /F "delims=" %%i in (list01.txt) の取り出しの時に!が抜け落ちてしまい 以後の処理が正しく行えません。 !が抜け落ちないようにするには どのようにすればよいでしょうか。 よろしくお願いします。 ---test.bat---------------------------------------------- setlocal enabledelayedexpansion @echo off set x=C:\tmp\sample\DATA1\ set y=C:\tmp\sample\DATA2\ if exist list1.txt del list1.txt if exist list2.txt del list2.txt dir /b /s /a-d %x% > list01.txt dir /b /s /a-d %y% > list02.txt for /F "delims=" %%i in (list01.txt) do ( set j=%%i echo !j:%x%=!>> list1.txt ) for /F "delims=" %%i in (list02.txt) do ( set j=%%i echo !j:%y%=!>> list2.txt ) fc /n /w list1.txt list2.txt > result.txt if ERRORLEVEL 1 ( set /p z="両者は一致しませんでした。" goto :EOF ) else ( if exist result.txt del result.txt ) set cnt=1 set err_cnt=0 for /F "delims=" %%i in (list1.txt) do ( set /p<NUL=[!cnt!] fc /n /w "%x%%%i" "%y%%%i" >> nul if ERRORLEVEL 1 ( echo [!cnt!] %x%%%i >> result.txt fc /n /w "%x%%%i" "%y%%%i" 2>&1 >> result.txt set /a err_cnt=!err_cnt!+1 ) set /a cnt=!cnt!+1 ) echo; if %err_cnt%==0 ( set /p z="両者は完全に一致しました。" ) else ( set /p z="%err_cnt% 個が一致しませんでした。" ) ------------------------------------------------- 【動作環境】Windows7 コマンドプロンプト(Ver.6.1.7601)  

  • バッチファイルでサブディレクトリィにコピー

    あるディレクトリィで以下のバッチファイルを実行し、サブディレクトリィの一番深い階層にあるフォルダに、同じファイル(zzz.txt)をコピーしようとネットで調べたりして、以下のバッチファイルを実行してもうまくいきません。どうしたらいいか教えてください。よろしくお願いします。 for /d %%d in (*) do cd %%d for /d %%a in (*) do copy zzz.txt "%%a\"

  • MS-DOSバッチファイルで

    度々ご教授お願い致します。 以下のようなMS-DOSバッチファイルで、xcopy コピー元 コピー先のようにしたいのですがこれではうまくいきません。 どのようにしたら良いでしょうか。宜しくお願い致します。 FOR /F "eol=; tokens=1,2 delims=, " %%i in (c:\a.txt) do (@echo %%i %%j) xcopy %%i %%j /s /o /y >> (@echo %%i %%j)

  • バッチ(win系)内でのファイル名の取得方法

    こんにちは。 バッチ内で日々動的に変わるファイル名の取得で困っています。 動的に変わるファイル名というのは日付付のファイル名です。 例) 041208_sample.txt 例えば、とあるフォルダ(a)には 041206_sample.txt 041207_sample.txt 041208_sample.txt と複数ファイルがあり、あるシステムから送付されるファイル(date.txt)の内容が"20041208"だった場合に041208_sample.txt(注 20041208_sample.txtでない)を 別なフォルダ(b)に複写するという事を行いたいのです。 仮にファイル名の日付の桁数が「041208」でなく20041206_sample.txtだった場合のバッチコーディング例は for /F %%i in ( date.txt ) do set TXTDATE=%%i copy a\%TXTDATE%_sample.txt b とできるのですが、、、、どのようなテクニックが必要でしょうか? ちなみに動作環境はwindowsNTを使用しております。 よろしくお願いします。